2008-12-19 44 views
0

用有點吃力,正則表達式一點點,我有4碼串正則表達式和匹配碼從右到左

碼4:CODE3:CODE2:CODE1

每個代碼是可選除了CODE1

所以我可以有AB:BC,DE:FG

BC :: FG

AB的

::: FG

在上面CODE1 = FG免打擾我的親愛的生活我不能工作了正則表達式

的每一種情況下很容易做到的標準的字符串解析,但由於buisness對象需要通過正則表達式來實現,因此需要通過vb.net RegEX.matche,groups(「Code1」)fg(我希望這很有意義)返回

謝謝提前尋求幫助

結束了一點正則表達式,沒有工作,有點亂,但它的工作原理

(^(?<code1>[\w]*)$)|(^(?<code2>[\w]*):(?<code1>[\w]*)$)|(^(?<code3>[\w]*):(?<code2>[\w]*):(?<code1>[\w]*)$)|(^(?<code4>[\w]*):(?<code3>[\w]*):(?<code2>[\w]*):(?<code1>[\w]*)$) 

鉭所有

回答

4

有沒有必要在這裏使用正則表達式。

我不知道你在用什麼語言,但是在':'上分割字符串,你會得到一組代碼。

如果你真的只是想驗證字符串是否是有效的這則

/(\w*:){0,3}\w+/ 

你的描述,你已經給了一些例子相符。

+0

我寧願[^:] +爲\ w *個人,除此之外看起來不錯 – 2008-12-19 11:15:48

+0

工作正常並且匹配代碼的所有變體,但我看不到如何通過regex.matches提取,將個體部分(code1) 我已經更新了爲什麼我需要這樣做的問題 – spacemonkeys 2008-12-19 11:16:57

0

我不確定爲什麼你必須將代碼從右到左匹配。只需使用正則表達式來挑開弦:

/(.*):(.*):(.*):(.+)/ 

,然後你在$ 1中有CODE1在$ 4 CODE2在$ 3 CODE3在$ 2,碼4。

0

(CODE1)?:(CODE2)?:(CODE3)?:CODE4會工作 - 如果領先:沒關係。否則,如果你不能擁有領先的冒號,列舉:

(CODE1:(CODE2)?:(CODE3)?:|CODE2:(CODE3)?:|CODE3)?CODE4

沒有什麼特別擔心的是最右邊的部分是強制性的,而最左邊的部分不是。