2011-04-21 74 views
1

嗯,我一直在使用正則表達式並取得了很好的成功,但我碰到了一個障礙。愚蠢的正則表達式混淆

我有兩個字符串的模式,我想區分:

AAA(CR)(LF)* 

VS

AAA BBBBB(CR)(LF)* 

其中A是一個字母,B可能是除(CR)/(LF)任何字符,並(CR)/(LF)是回車和換行(即0h0D/0h0A)。

我已經試過以下模式:

"[A-Z ]+.+\x0D\x0A\*" 

但是,aggravatingly,這符合上述兩種模式! .+不應該阻止匹配的第一個模式?據我瞭解,+的一個或多個的貪婪匹配...以前的令牌...我哪裏錯了?

感謝,
布賴恩

+2

在你的描述,你不提空格字符,但你有它,你的正則表達式。當您的描述與您的示例不符時,很難理解您的內容。在你的兩個樣本輸入中,一個確實有空間,另一個沒有。這是你如何區分它們的方法。 – 2011-04-21 01:14:34

回答

4

你的正則表達式匹配AAA(CR)(LF)因爲第一字符匹配[A-Z ]+然後第三A匹配.+

雖然+表示貪婪匹配,正則表達式引擎將找到AAA,發現該表達式的其餘部分無法比擬後原路返回。因此它會嘗試AA,並發現它可以匹配字符串的其餘部分。

1

除非我誤解...

"[A-Z]+\x0D\x0A\*" 

"[A-Z]+ .+\x0D\x0A\*"