这preg_match语法与“.+”匹配什么?


What does this preg_match syntax match ".+?"

我对perl风格的常规表达式相当了解,但是今天我发现了一个我不明白的:

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

.+?是什么意思?我一个人不敢面对.+,我一个人理解.?。但是.+??这对我来说似乎是一个错误。

该行应该与电子邮件正文中流行的引文前缀相匹配,并且它与后面的看法要复杂得多,但这是我唯一无法理解的部分,而且正则表达式似乎仍然有效。

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

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

简而言之,当您添加?其匹配的最小可能量时,如果不?其匹配量,

则尽可能:

解释如下:

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))

懒惰不贪婪

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

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

在 regex101.com 检查