在另一个问题中,有以下几行:
$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'
该(?=:)
位表示搜索冒号,它必须。但是,我不理解那种特殊的语法,使用?=
. 那里到底发生了什么?
在另一个问题中,有以下几行:
$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'
该(?=:)
位表示搜索冒号,它必须。但是,我不理解那种特殊的语法,使用?=
. 那里到底发生了什么?
这是一个积极的前瞻性。它查看特定子表达式是否出现在该点之后。但它不会在比赛中消耗任何东西:
积极的前瞻工作是一样的。
q(?=u)
匹配q
后跟 a 的 au
,而不是u
匹配的一部分。正向前瞻结构是一对圆括号,左括号后跟一个问号和一个等号。—<a href="http://www.regular-expressions.info/lookaround.html" rel="nofollow noreferrer">RegularExpressions.info
您可能会注意到,环视在替换文本时特别有用,因为您不需要将周围环境包含到替换文本中。例如,用你可以做的替换每q
一个不跟 a的u
qu
replace 'q([^u])' by 'qu\1'
但这会捕获以下字符,因为它是匹配的一部分并稍后再次重新插入。您还可以使用环视:
replace 'q(?!u)' by 'qu'
其中只有 q 被匹配和替换,因此不再需要在替换字符串中包含部分匹配项。