2017-08-03 43 views
3

我一直在寻找这个问题Greedy vs. Reluctant vs. Possessive Quantifiers“* +”和“*”的占有和贪婪量词给出不同结果的情况?

我可以看到*+*都匹配零次或更多次,但占有欲量词*+将匹配向前尽可能..而且*会做.*和原路返回。而且我可以接受,当.*字符串很长时,*+会更有效。

我很感兴趣,但他们给出不同的结果。

而且我看到一个评论

@moodboom,还有零的情况下永远(数学事实),其中 占有欲量词会产生不会通过简单的贪婪量词产生 匹配。有些情况下,当贪婪量词会产生匹配时,它们会产生不匹配。 对于所有其他情况(贪婪和占有产生相同的结果),占有量词给予了性能增益。 - 在23:00

通配符 5月5日,我会看到这个扩大后,特定情况下,占有和贪婪量词给出不同的结果很感兴趣。

对比*+*

我也很有兴趣在什么不同的结果是可能的情况下,对比?+ VS ?

+0

嗯,我的意思是回答这个问题,但没有得到解决它。现在在手机上,但明天可能会这样做。 – Wildcard

+0

@Wildcard谢谢。只要你有时间细 – barlop

+0

非常相关(与不同比赛的例子,并在答案错综复杂的许多美丽的解释):https://stackoverflow.com/questions/5319840/greedy-vs-reluctant-vs -possessive-量词 –

回答

2

我发现一个案例,但我不确定的解释和针对性。我认为还有很多其他案例。

测试用例

greedy = /.*b/ 
posssessive = /.*+b/ 

测试上:

foob

只有贪婪的比赛吧。

说明

物主将首先匹配整个字符串.*+),然后尝试匹配b字符,但找到的字符串($)的唯一结束。

贪婪也将整个字符串匹配,但再看看落后,直到找到第一b字符。它会找到。

+0

你说你在foo和foob上测试过它。你没事我通过删除您foo'的'例如简化你的答案,但保持的一个'foob'是,无论是贪婪和占有欲给foo的(不匹配的话)相同的结果,所以foo是无关紧要的原因。什么是相关的是你的第二个例子 - foob。如果没有'foo'的例子,你的答案会更简单明了'cos foo并不是我所要求的范例。另一方面是'foob'。 – barlop

+0

UPVOTED您发现的foobo是惊人的,这也是一个简单的测试案例。 – barlop

+0

我同意你的观点,实际上当我写完文章时,我想知道如何删除第一个例子。它是否真的是你期望的答案?写作时我不确定。 –

0

退房在演示的例子测试字符串aaabaaax试贪婪模式a*[^b]及占有格局a*+[^b]

Demo 1

Demo 2

a*[^b]会原路返回,试图找到一个匹配,因此它发现aaaaaab

a*+[^b]会发现aaa不会走回头路,将尝试匹配[^b],未能对aaab

+0

我问了一些结果是**不同的例子**您刚刚描述的两个都是找到'aaa',听起来像是同样的结果。我知道这个过程是不同的,但我要求的例子有不同的结果。你也没有覆盖我写的内容的最后一行。 – barlop