请举一个例子,可以看出“repeat-exactly-m-times”量词的贪婪和懒惰版本之间的区别。
问题来自这里和这里。
如果没有差异,那么{m}?
量词存在什么?
3 回答
我不相信和之间有任何真正的区别{m}
,{m}?
因为每个都指定了 m 次。{m,}
但是, and {m,}?
(和{m,}+
,当我们在这里时)之间是有区别的。一般而言,它对于量词是合适和需要的,即使在特定情况下不需要它。
正如评论中所说,Oniguruma 正则表达式引擎以不同的方式对待它,作为一个例外:{m}?
不是非贪婪精确 m(与贪婪精确 m 相同),而是 0-or-m。我尝试过的所有其他引擎都像其他海报所说的那样:没有区别。
非贪婪精确 m 存在的原因:如果不存在,则为例外。异常更难记住,也更难实现——这是额外的工作,在这种情况下,由于语义相同,它不会伤害任何人。
我喜欢 Oniguruma,并且感谢他们可能想要将不需要的部分更改为更有用和更高效的东西,但这看起来像是一个等待发生的错误。幸运的是,没有一个理智的人会写出非贪婪的精确...
完全匹配没有区别{m}
。
但是,{m,}
贪婪限定符匹配尽可能多的字符会有所不同,而惰性限定符匹配尽可能少。
给定字符串"Baaaaaaaaaaaa"
正则表达式(B[a]{2,}?)
将匹配"Baa"
正则表达式(B[a]{2,})
将匹配"Baaaaaaaaaaaa"
然而,完全匹配{m}
:
正则表达式(B[a]{2}?)
将匹配"Baa"
正则表达式(B[a]{2})
也将匹配"Baa"