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

Regex {m}和{m}量词之间有什么区别吗?,regex,quantifiers,Regex,Quantifiers,请给出一个例子,说明贪婪和懒惰版本的“repeat-justice-m-times”量词的区别。 问题源于和。 如果没有差异,那么{m}?量词存在的原因是什么?在精确匹配中没有差异{m} 但是,将与{m,}不同,因为贪婪的限定符匹配尽可能多的字符,而懒惰的限定符匹配尽可能少的字符 给定字符串“baaaaaaa” 正则表达式(B[a]{2,}?将匹配“Baa” 正则表达式(B[a]{2,})将匹配“baaaaaaa” 然而,对于精确匹配的{m}: 正则表达式(B[a]{2}?将匹配“Baa”

请给出一个例子,说明贪婪和懒惰版本的“repeat-justice-m-times”量词的区别。
问题源于和。

如果没有差异,那么
{m}?
量词存在的原因是什么?

在精确匹配中没有差异
{m}

但是,将与
{m,}
不同,因为贪婪的限定符匹配尽可能多的字符,而懒惰的限定符匹配尽可能少的字符


给定字符串“baaaaaaa”

正则表达式
(B[a]{2,}?
将匹配
“Baa”

正则表达式
(B[a]{2,})
将匹配
“baaaaaaa”


然而,对于精确匹配的
{m}

正则表达式
(B[a]{2}?
将匹配
“Baa”


正则表达式
(B[a]{2})
也会匹配
“Baa”

在精确匹配
{m}
中没有区别

但是,将与
{m,}
不同,因为贪婪的限定符匹配尽可能多的字符,而懒惰的限定符匹配尽可能少的字符


给定字符串“baaaaaaa”

正则表达式
(B[a]{2,}?
将匹配
“Baa”

正则表达式
(B[a]{2,})
将匹配
“baaaaaaa”


然而,对于精确匹配的
{m}

正则表达式
(B[a]{2}?
将匹配
“Baa”


regex
(B[a]{2})
也将匹配
“Baa”

,正如在评论中所说,Oniguruma regexp引擎将其视为不同的例外:
{m}?
不是一个非贪婪的精确m(与贪婪的精确m相同),而是0-or-m。我试过的所有其他引擎都像其他海报上说的那样:没什么区别

非贪婪精确m存在的原因:如果它不存在,那就是一个例外。异常更难记住,也更难实现——这是额外的工作,在这种情况下,由于语义相同,它不会伤害任何人


我喜欢Oniguruma,也很感激他们可能想把不需要的部分变成更有用、更高效的部分,但这看起来像是一个等待发生的bug。幸运的是,没有一个理智的人会写出非贪婪的精确m。

正如在评论中所说,Oniguruma regexp引擎将其视为一个例外,以不同的方式处理:
{m}?
不是一个非贪婪的精确m(与贪婪的精确m相同),而是0-or-m。我试过的所有其他引擎都像其他海报上说的那样:没什么区别

非贪婪精确m存在的原因:如果它不存在,那就是一个例外。异常更难记住,也更难实现——这是额外的工作,在这种情况下,由于语义相同,它不会伤害任何人


我喜欢Oniguruma,也很感激他们可能想把不需要的部分变成更有用、更高效的部分,但这看起来像是一个等待发生的bug。幸运的是,没有一个理智的人能写出非贪婪的精确的m…

我不相信
{m}
{m}?
之间有什么真正的区别,因为它们都精确地指定了m次。然而,
{m,}
{m,}?
(和
{m,}+
,当我们这样做的时候)之间是有区别的。它对于量词来说是适当的和必需的,即使对于那个特殊的情况不需要它。

我不相信
{m}
{m}?
之间有任何真正的区别,因为它们都精确地指定了m次。然而,
{m,}
{m,}?
(和
{m,}+
,当我们这样做的时候)之间是有区别的。对于量词来说,它是适当的和必需的,即使对于那个特殊的情况不需要它。

请给出一个例子,说明
{2}
{2}?
的行为不同。OP没有问
{m,}
.AFAIK,{m,}是唯一有区别的地方,OP特别询问了无逗号
{m}
。请给出一个例子,说明
{2}
{2}
的行为不同。OP没有询问
{m,}
。AFAIK,{m,}是唯一有区别的地方。同样,OP特别询问了无逗号
{m}
@pst:我刚刚试过,您似乎是对的:它被解析为0-or-m(即
{m}中的
是可选性量词,而不是贪婪修饰符)。不知道为什么你删除了你的评论,它是当场的。@Amadan-这可能是rubular特有的吗?好了,其他的正则表达式引擎会处理它们identically@TheSmose:它不能特定于红疹。它可能特定于Oniguruma(新Ruby使用的正则表达式引擎)。你也是对的-JS和Perl,甚至旧Ruby的思维方式似乎也与Ruby 1.9不同。@pst:我刚刚在中尝试过,你似乎是对的:它被解析为0-or-m(即
中的
{m}?
是可选性量词,而不是贪婪修饰符)。不知道为什么你删除了你的评论,它是当场的。@Amadan-这可能是rubular特有的吗?好了,其他的正则表达式引擎会处理它们identically@TheSmose:它不能特定于红疹。它可能特定于Oniguruma(新Ruby使用的正则表达式引擎)。你也是对的——JS和Perl,甚至旧的Ruby似乎也与Ruby1.9有不同的想法。