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