怎么做{n}?和{n}不同?

时间:2013-08-01 23:02:16

标签: .net regex

我正在尝试理解以下正则表达式量词( a 只是这里的示例性标记):

a{n}?

问号如何影响上述表达式的匹配?它与以下内容有何不同?

a{n}

我希望模式aa{1}?a能够匹配aaaaa。在匹配aaa时,aa 匹配。模式a(a{1})?a确实匹配两者,所以括号确实在这里有所作为。


注意:msdn文章Quantifiers in Regular Expressions指出:

  

{n}量词恰好与前一个元素匹配n次,   其中n是任何整数。

对于{n}?,它添加了以下内容,而不是过于有用的部分:

  

这是贪婪量词{n} +的懒惰对应物。

1 个答案:

答案 0 :(得分:8)

<强>没有即可。文章指出:

  

{n} 量词恰好与 n 次匹配前面的元素,其中 n 是任何整数。 { n } 是一个贪婪的量词,其懒惰的等价物是 { n }?

     

...

     

{n}?量词完全匹配前面的元素 n 次,其中 n 是任何整数。它是贪婪量词 { n } + 的懒惰对应物。

请注意文字完全相同。基本上,添加不会改变量词的行为。似乎.NET的正则表达式引擎支持{n}?作为{n}的替代。


有趣的是,这篇文章似乎确实包含错误:

  

{ n ,} 量词与前面的元素匹配至少 n 次,其中 n 是任意的整数。 { n,} 是一个贪婪的量词,其懒惰的等价物是 { n }?

这是错误的。 {n,}的惰性等效值为{n,}? {n}?相同。