我在一些PHP脚本中看到了这一点:
[a-zA-Z0-9_]++
双加意味着什么?
答案 0 :(得分:33)
它基本上意味着如果正则表达式引擎稍后失败匹配,它将不会返回并尝试撤消它在此处所做的匹配。在大多数情况下,它允许引擎fail much faster,并且可以在您需要的地方为您提供控制 - 这在大多数情况下非常罕见。
答案 1 :(得分:11)
给你一个非常简单的例子:
假设您有一个字符串"123"
。在以下示例中,匹配的字符下面带有^
。
正则表达式:\d+?.
部分匹配!
123 # The \d+? eats only 1 because he's lazy (on a diet) and leaves the 2 to the .(dot). ^^ # This means \d+? eats as little as possible.
正则表达式:\d+.
完全匹配!
123 # The \d+ eats 12 and leaves the 3 to the .(dot). ^^^ # This means \d+ is greedy but can still share some of his potential food to his neighbour friends.
正则表达式:\d++.
没有匹配项!
123 # The \d++ eats 123. He would even eat more if there were more numbers following. # This means \d++ is possessive. There is nothing left over for the .(dot), so the pattern can't be matched.