我正在阅读有关量词的内容,并认识到??
(惰性可选)量词的存在。从那时起,我一直在进行一些测试,但是此量词的行为似乎很不一致。
你们能为我提供这个操作员的例子吗?
此外,我尝试测试字符串/a??b+/
的正则表达式abbb
,这使我意外地匹配了abbb
。我一直期望bbb
是匹配项,因为惰性量词会优先考虑较小的匹配项。
对于正则表达式/a+b??/
和字符串aaab
,匹配项是预期的aaa
与贪婪的正则表达式aaab
匹配的/a+b?/
的匹配。
我先谢谢了,希望你们能帮助我了解这里发生的事情。 :)
答案 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
字符(如果存在)