愚蠢的RegEx混乱

时间:2011-04-21 00:53:52

标签: .net regex

好吧,我一直使用正则表达式取得了很好的成功,但我遇到了麻烦。

我想要区分两种字符串模式:

AAA(CR)(LF)*  

vs

AAA BBBBB(CR)(LF)*

如果A是字母,B可以是除(CR) / (LF)以外的任何字符,而(CR) / (LF)是回车和换行(即, 0h0D/0h0A)。

我尝试过以下模式:

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

但是,加重的是,这符合上述两种模式! .+不应该阻止第一个模式匹配吗?据我所知,+是以前令牌的一个或多个的贪婪匹配......我哪里出错?

谢谢,
布赖恩

2 个答案:

答案 0 :(得分:4)

您的正则表达式与AAA(CR)(LF)匹配,因为第一个两个字符与[A-Z ]+匹配,然后第三个A匹配.+

虽然+表示贪婪匹配,但在找到AAA并发现表达式的其余部分无法匹配后,正则表达式引擎将回溯。因此它尝试使用AA并发现可以匹配字符串的其余部分。

答案 1 :(得分:1)

除非我误解了......

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

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