2010-09-09 41 views
2

模式這是我第二次嘗試得到這個答案,因爲我搞砸了第一次:S是你可以猜測進出口新的正則表達式C#正則表達式需要字符串匹配

基本上,該字符串包含了大量的分隔的話「\」 的。所以例如

\gyifgy8i\gyigyi9g\player_0\k1ng*tar%\gp86gg78.\g79g\player_1\th3dadY>\gyigyigiy\huiohgiu\player_2\j0k$r\g68g6o9g\987pgh890\player_3\PLAYERNAME 

我需要一個模式,它可以匹配\ player_n \之後的每個單詞,其中n是一個數字。所以從上面我想匹配k1ng * tar%和th3dadY>和j0k $ r(沒有任何一方)。這些是來自UDP查詢的播放器名稱,udp查詢將每個值都用「\」表示。每個玩家的名字總是以\ player_n \開頭,正如你上面看到的那樣。

本來有人建議我使用:

string rex = @"[\w]*[\\]player_[0-9]+[\\](?<name>[A-Za-z0-9]*)\b"; 
     Regex re = new Regex(rex); 


      for (Match m = re.Match(stringData); m.Success; m = m.NextMatch()) 
     { 

      players[count] = (m.Groups["name"]).ToString(); 
      textBox1.Text += players[count] + "\r\n"; 
      MessageBox.Show((m.Groups["name"]).ToString()); 
     } 

上面的圖案有點工作,但前提是playername使用A-ZA-Z0-9。當時我沒有意識到該玩家名稱可以包含任何角色。有人可以請我修改這種模式,正則表達式超越了我:<

在此先感謝。

回答

3

提供的正則表達式作品的其餘部分需要,你可以用

(?<name>[^\\]*) 

將匹配除\

+0

這是更好的一切,但仍不能100%取代

(?<name>[A-Za-z0-9]*) 

,我確實得到了一個更好的結果,但是我現在只是運行這個應用程序,udp字符串有一些晦澀的玩家名稱,例如:VM_C) - (r!s.cl和:dezerTer // cl。這兩個名稱都沒有匹配你的新正則表達式: brux 2010-09-09 22:59:27

+0

sry,這實際上工作...它得到smt處理來自udp的返回字符串,由於某種原因udpclient我們沒有收到完整的字符串:s – brux 2010-09-09 23:23:31

相關問題