2011-04-21 76 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\*"