我知道perl风格的常规表现相当不错,但今天我找到了一个我不理解的地方:
preg_match('/^On.+?wrote:.+?$/i',$line); //reduced example
.+?
是什么意思?我单独考虑.+
,我完全理解.?
。但.+?
?这对我来说似乎是个错误。
该行应该与电子邮件正文中的流行引文前缀匹配,并且它看起来要复杂得多,但这是我无法理解的唯一部分,而且regexp似乎仍然可以正常工作。
答案 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]