1

另一个问题中,有以下几行:

$value='x-Cem-Date:Wed, 16 Dec 2009 15:42:28 GMT';
$value = preg_replace('/(^.+?)(?=:)/e', "strtolower('\\1')", $value);
// yields 'x-cem-date:Wed, 16 Dec 2009 15:42:28 GMT'

(?=:)位表示搜索冒号,它必须。但是,我不理解那种特殊的语法,使用?=. 那里到底发生了什么?

4

1 回答 1

5

这是一个积极的前瞻性。它查看特定子表达式是否出现该点之后。但它不会在比赛中消耗任何东西:

积极的前瞻工作是一样的。q(?=u)匹配q后跟 a 的 a u,而不是u匹配的一部分。正向前瞻结构是一对圆括号,左括号后跟一个问号和一个等号。—<a href="http://www.regular-expressions.info/lookaround.html" rel="nofollow noreferrer">RegularExpressions.info

您可能会注意到,环视在替换文本时特别有用,因为您不需要将周围环境包含到替换文本中。例如,用你可以做的替换每q一个不跟 a的uqu

replace 'q([^u])' by 'qu\1'

但这会捕获以下字符,因为它是匹配的一部分并稍后再次重新插入。您还可以使用环视:

replace 'q(?!u)' by 'qu'

其中只有 q 被匹配和替换,因此不再需要在替换字符串中包含部分匹配项。

于 2009-12-16T16:27:01.430 回答