在another question中,有以下几行:
$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'
(?=:)
位表示搜索冒号,它必须。但是,我不理解?=
的特定语法。究竟是怎么回事?
答案 0 :(得分:5)
那是positive lookahead。它查看特定的子表达式是否在之后发生。但它不会消耗匹配中的任何内容:
积极前瞻的作用是一样的。
q(?=u)
匹配后跟q
的{{1}},而不会匹配u
部分。正前瞻构造是一对圆括号,开口括号后跟一个问号和一个等号。 - RegularExpressions.info
您可能会注意到,在替换文本时,环视特别有用,因为您不需要将周围环境包含在替换文本中。例如,要替换u
之后没有跟q
u
的每个qu
,您可以执行
replace 'q([^u])' by 'qu\1'
但是它会捕获以下字符,因为它是匹配的一部分,然后再次重新插入。您还可以使用环视:
replace 'q(?!u)' by 'qu'
只有q匹配并被替换,因此不再需要在替换字符串中包含部分匹配。