2008-11-16 48 views
1

的微調我已經得到了正則表達式這是正常的,但因爲它camed出不工作在一些情況以及我有問題,正則表達式

保持關注消息預覽原因郵件編輯器做一些棘手的事情 「\」

[\ [] [\ ^%#\ $ \ * @ \ - ;] * [\ ^%#\ $ \ * @ \ - 。?] [ \]]

它的任務是找到一般看起來像那樣的圖案

[ABA]

  • A - 炭起訂^,%,#,$,*,@, - ,;
  • 乙 - 一些文本
  • [和]包括在圖案

有望找到這種模式出現的所有測試串

黑狐[#SAMPLE1#] [% sample2%] - [#sample3#]吃塊。

但不是比賽的期望列表

  • 「[#SAMPLE1#]」
  • 「[%SAMPLE2%]」
  • 「[#樣品3#]」

我得到這個

  • 「[#sample 1#]」
  • 「[%SAMPLE2%]」
  • 「 - [#樣品3#]」

它似乎也會發生在其他集字符這個問題 「A」。那麼有人可以建議對我的正則表達式進行更改以使其正常工作嗎?

,並不太重要的事情,如何讓我的正則表達式來排除模式看起來像

[ABC]

  • A - 從集合^,%,#,$字符,*,@, - ,;
  • 乙 - 一些文本
  • c - 從中​​集字符^,%,#,$,*,@, - ,; 比A
  • [和]被包括在圖案

例如

[$ SAMPLE1#] [%SAMPLE2 @]其他[%樣品3;]

在此先感謝

MTH

+0

我剛剛添加了正則表達式來檢測ABA和ABC:你能證實他們爲你工作嗎? – VonC 2008-11-16 09:07:04

回答

3
 
\[([%#$*@;^-]).+?\1\] 

應用於文本:

 
Black fox [#sample1#] [%sample2%] - [#sample3#] [%sample4;] eats blocks. 

比賽

  • [#sample1#]
  • [%sample2%]
  • [#sample3#]
  • 但不[%sample4;]

編輯

這對我的作品(如預期輸出,如預期由C#所接受的正則表達式):

Regex re = new Regex(@"\[([%#$*@;^-]).+?\1\]"); 
string s = "Black fox [#sample1#] [%sample2%] - [#sample3#] [%sample4;] eats blocks."; 

MatchCollection mc = re.Matches(s); 
foreach (Match m in mc) 
{ 
    Console.WriteLine(m.Value); 
} 
+0

是的,但是如果不使用前瞻,你會如何檢測ABC? [^ \ 1]不起作用... – VonC 2008-11-16 09:27:14

1

爲什麼第一個「?」在「[[]?」中

\[[\^%#\$\*@\-;].*?[\^%#\$\*@\-;]\] 

會檢測你的不同的字符串就好

爲了更精確:

\[([\^%#\$\*@\-;])([^\]]*?)(?=\1)([\^%#\$\*@\-;])\] 

將檢測[ABA]

\[([\^%#\$\*@\-;])([^\]]*?)(?!\1)([\^%#\$\*@\-;])\] 

將檢測[ABC]

+0

好吧,我做了這麼多的改變,我錯過了這個 – MoreThanChaos 2008-11-16 09:04:21

1

你h AVE開口方括號的一個可選的匹配:

[\]]?

對於你的第二部分的問題(並可能簡化)試試這個:

\ [\%[^ \%] + \%\] | \ [\#[^ \#] + \ #\] | \ [\ $ [^ \ $] + \ $ \]

在這種情況下,存在對於每個可能的定界符的子圖案。 |字符是「OR」,所以如果3個子表達式中的任何一個匹配,它就會匹配。

每個子表達式將:

  • 開放托架
  • 特殊字符
  • 一切不是一個特殊字符(1)
  • 特別炭
  • 結算鬥提

(1)可能需要添加額外的排除項,如']'或'[',所以我t不與意外在大型體匹配諸如文本:

[%MyVar的#]等等等等[$ OtherVar%]

羅布