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

Mar*_*ulz 8 .net regex

我正在尝试理解以下正则表达式量词(只是一个示例性令牌):

a{n}?
Run Code Online (Sandbox Code Playgroud)

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

a{n}
Run Code Online (Sandbox Code Playgroud)

我本来期望的模式aa{1}?a同时匹配aaaaa为例子.虽然它匹配aaa,aa不是匹配.模式a(a{1})?a确实匹配两者,所以括号确实在这里有所作为.


注意:正则表达式中的msdn文章Quantifiers表示:

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

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

它是贪婪量词{n} +的懒惰对应物.

p.s*_*w.g 8

没什么.文章指出:

{N}量词前面的元素完全匹配Ñ次,其中Ñ是任意整数.{ n }是一个贪婪的量词,它的惰性等价是{ n }?.

...

{N}?量词恰好与前一个元素匹配n次,其中n是任意整数.它是贪婪量词{ n } +的懒惰对应物.

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


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

{ Ñ,}量词前述元素相匹配的至少Ñ次,其中Ñ是任意整数.{ n, }是一个贪婪的量词,它的懒惰等价是{ n }?.

这是错的.懒惰的等效的{n,}{n,}?这是一样的{n}?.

  • 有些人在面对问题时会想"我知道,我会使用正则表达式".现在他们有'{n}?'问题. (10认同)