我对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 检查