【发布时间】:2011-05-28 05:38:38
【问题描述】:
我在一些 PHP 脚本中看到了这一点:
[a-zA-Z0-9_]++
双加是什么意思?
【问题讨论】:
-
Doubleplusgood,当然。 :o)
-
此问题已添加到Stack Overflow Regular Expression FAQ,在“量词”下
我在一些 PHP 脚本中看到了这一点:
[a-zA-Z0-9_]++
双加是什么意思?
【问题讨论】:
这基本上意味着如果正则表达式引擎稍后匹配失败,它不会返回并尝试撤消它在这里所做的匹配。在大多数情况下,它允许引擎fail much faster,并且可以让您在需要的地方进行一些控制——这对于大多数用途来说是非常罕见的。
【讨论】:
举个很简单的例子:
假设您有一个字符串"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.
【讨论】:
+ 可以像* 和? 一样变得懒惰。