"*+"和"*"的所有格和贪婪量词给出不同结果的情况?



我在看这个问题 贪婪 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

最新更新