这个preg_match语法与“。+?”匹配的是什么

时间:2014-04-01 08:49:49

标签: php regex

我知道perl风格的常规表现相当不错,但今天我找到了一个我不理解的地方:

preg_match('/^On.+?wrote:.+?$/i',$line); //reduced example

.+?是什么意思?我单独考虑.+,我完全理解.?。但.+??这对我来说似乎是个错误。

该行应该与电子邮件正文中的流行引文前缀匹配,并且它看起来要复杂得多,但这是我无法理解的唯一部分,而且regexp似乎仍然可以正常工作。

3 个答案:

答案 0 :(得分:2)

+表示一个或多个并且贪婪。 +?意思相同,它就像通常的正则表达式一样不贪婪。

编辑:我想进一步解释一下,但是deceze的评论已经解释得足够了。^^

答案 1 :(得分:2)

简而言之,当您添加?匹配的最小金额时,如果没有?,则匹配的金额最多:

以下是解释:

NODE                     EXPLANATION
--------------------------------------------------------------------------------
  .+?                      any character except \n (1 or more times
                           (matching the least amount possible))
--------------------------------------------------------------------------------
  .+                       any character except \n (1 or more times
                           (matching the most amount possible))

答案 2 :(得分:0)

懒惰不贪心

  

。+?匹配任何字符(换行符除外)

Quantifier: Between one and unlimited times, as few times as possible, expanding as needed [lazy]

检查regex101.com