Lazy Optional 量词应该如何表现?

How should a Lazy Optional quantifier behave?

我正在阅读有关量词的内容,并认识到 ??(惰性可选)量词的存在。从那以后我已经 运行 进行了一些测试,但是这个量词的行为看起来很不一致。

你们中的任何人都可以为我提供这个运算符的示例吗?

此外,我尝试测试字符串 abbb 的正则表达式 /a??b+/,这给了我 abbb 的意外匹配。我期待 bbb 作为匹配项,因为惰性量词会优先考虑可能的较小匹配项。

对于正则表达式 /a+b??/ 和字符串 aaab,匹配是预期的 aaa 与贪婪正则表达式 /a+b?/ 匹配的 aaab

在此先表示感谢,希望你们能帮助我了解这里发生的事情。 :)

懒惰只作用于右边,而不作用于左边。搜索模式匹配从左到右进行。一旦找到 a 的匹配项,只要模式的其余部分匹配,它就会尝试使用它。 a? 是贪心还是懒惰并不重要。

如果您比较模式 a+b?a+b??,并且输入像

,那么懒惰很重要
aaab

greedy 版本会匹配整个字符串,lazy 版本只会匹配 aaa.

这可以更好地说明 aa 与:

(a?)(a+)

https://regex101.com/r/c6tNrM/2

Ensure that group 1 one has an a. Give the rest of the a chars to group 2

(a??)(a+)

https://regex101.com/r/c6tNrM/3

Group 1 might contain an a unless something else matches it more greedily in group 2


/a+b??/ 翻译成:

  • a+ - 给我所有连续的 a 个字符
  • b?? - 给我一个 b char 如果它存在 char 但我希望你不要,除非有更多的正则表达式要处理。此外,如果 b 在附加正则表达式中匹配,那么我不想要它。

/a+b?/ 转换为:

  • a+ - 给我所有连续的 a 个字符
  • b? - 给我一个 b 个字符(如果存在)