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