“{m}”和“{m}”量词之间有什么区别吗?



请举一个例子,可以看到贪婪版本和懒惰版本的"重复精确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"

相关内容

  • 没有找到相关文章

最新更新