惰性可选量词应如何表现?

时间:2019-08-29 17:06:16

标签: regex regex-greedy

我正在阅读有关量词的内容,并认识到??(惰性可选)量词的存在。从那时起,我一直在进行一些测试,但是此量词的行为似乎很不一致。

你们能为我提供这个操作员的例子吗?

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

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

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

2 个答案:

答案 0 :(得分:2)

懒惰仅在右侧而不是左侧起作用。搜索模式匹配从左到右进行。只要找到a的匹配项,只要其余模式都匹配,它就会尝试使用它。 a?是贪婪还是懒惰都没关系。

懒惰最重要的是,如果您比较模式a+b?a+b??,并输入类似

aaab

贪婪的版本将匹配整个字符串,而懒惰的版本将仅匹配aaa

答案 1 :(得分:1)

可以通过以下方式更好地说明aa

(a?)(a+)

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

  

确保第1组具有一个a。将其余a个字符分配给组2

vs

(a??)(a+)

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

  

第1组可能包含a,除非在第2组中更贪婪地将其匹配


/a+b??/转换为:

  • a+-给我所有连续的a字符
  • b??-给我一个b字符,如果它存在字符,但是我希望您不要这样做,除非还有更多的正则表达式要处理。另外,如果b在附加的正则表达式中匹配,那么我就不需要它。

/a+b?/转换为:

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