猿问

贪婪的与不情愿的所有格量词

贪婪的与不情愿的所有格量词

我发现了这个优秀教程关于正则表达式,虽然我直觉地理解了“贪婪”、“不情愿”和“所有格”量词的作用,但我的理解似乎有一个严重的漏洞。

具体而言,在以下示例中:

Enter your regex: .*foo  // greedy quantifierEnter input string to search: xfooxxxxxxfoo
I found the text "xfooxxxxxxfoo" starting at index 0 and ending at index 13.Enter your regex: .*?foo  
// reluctant quantifierEnter input string to search: xfooxxxxxxfoo
I found the text "xfoo" starting at index 0 and ending at index 4.I found the text "xxxxxxfoo" 
starting at index 4 and ending at index 13.Enter your regex: .*+foo 
// possessive quantifierEnter input string to search: xfooxxxxxxfooNo match found.

解释提到整个输入字符串,字母是消耗掉马彻退却,最右边出现的“foo”是反流

不幸的是,尽管有很好的比喻,我还是不明白谁吃了什么.你知道另一个教程解释(简明扼要)吗?多么,怎样正则表达式引擎能工作吗?

或者,如果有人可以用一些不同的措辞解释以下段落,我们将不胜感激:

第一个示例使用贪婪的量词。*查找“任何”,0次或多次,后面跟着字母“f”o“。因为量词是贪婪的,表达式的.*部分首先吃掉整个输入字符串。此时,整个表达式无法成功,因为最后三个字母(“f”o“)已经被使用(是谁干的?)。所以这场比赛慢慢地退却了。从右到左?)一次只写一个字母,直到“foo”的最右边出现被反拨(这是什么意思?),此时匹配成功,搜索结束。

然而,第二个例子不太情愿,所以它从第一个消费开始(是谁干的?)“什么都没有”。因为“foo”没有出现在字符串的开头,所以它被迫吞下(燕子?)第一个字母(“x”),它在0和4处触发第一次匹配。我们的测试工具将继续这个过程,直到输入字符串耗尽为止。它在4点和13点找到了另一个匹配点。

第三个例子找不到匹配,因为量词是所有格的。在本例中,整个输入字符串由.*+、(多么,怎样?)没有留下任何东西来满足表达式末尾的“foo”。如果您想在不退却的情况下捕获所有的东西,请使用所有格量词(后退是什么意思?);在没有立即找到匹配的情况下,它将优于等效的贪婪量词。


摇曳的蔷薇
浏览 649回答 3
3回答
随时随地看视频慕课网APP
我要回答