我在看这个问题 贪婪 vs. 不情愿 vs. 占有量
词我可以看到*+
和*
如何匹配零次或多次,但所有格量词*+
将尽可能匹配前向。*
将做.*
和回溯。 我可以接受,当.*
字符串很长时,*+
会更有效率。
不过,我对他们何时给出不同的结果感兴趣。
我看到了一条评论
@moodboom,曾经有零个案例(数学事实( 所有格量词将产生不会产生的匹配项 通过简单的贪婪量词。偶尔有他们 当贪婪的量词产生匹配时,将产生不匹配。 对于所有其他情况(贪婪和占有欲产生相同的情况 结果(,所有格量词提供了性能增益。–通配符 5月5日下午 9:00
我非常有兴趣看到这个扩展,在特定情况下,所有格和贪婪量词给出不同的结果。
对比*+
和*
我也会对可能出现哪些不同结果的情况感兴趣,对比?+
与?
我找到了一个案例,但我不确定解释和相关性。我认为还有很多其他情况。
测试用例
greedy = /.*b/
posssessive = /.*+b/
测试于:
福布
只有贪婪才能与之匹敌。
解释
所有格将首先匹配整个字符串(.*+
(,然后尝试匹配b
字符,但只找到字符串的末尾($
(。
贪婪也会匹配整个字符串,但随后向后看,直到找到第一个b
字符。它会找到的。
查看演示中测试字符串aaab
的示例,aaax
尝试贪婪模式a*[^b]
和所有格模式a*+[^b]
演示 1
演示 2
a*[^b]
会回溯以尝试找到匹配项,因此它会在aaab
中找到aaa
a*+[^b]
会发现aaa
不会回溯,会尝试匹配[^b]
,失败aaab