PHP preg_replace:帮帮我grok(?= :)

Der*_*huk 1 php regex preg-replace

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

$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'
Run Code Online (Sandbox Code Playgroud)

(?=:)位表示搜索冒号,它必须.但是,我不明白那个特殊的语法,用?=.究竟是怎么回事?

Joe*_*oey 5

这是一个积极的前瞻.它查看特定的子表达式是否该点之后发生.但它不会消耗匹配中的任何内容:

积极的前瞻工作方式也是如此.q(?=u)匹配q后跟a的a u,而不是u匹配的一部分.正前瞻构造是一对圆括号,开口括号后跟一个问号和一个等号.- RegularExpressions.info

您可能会注意到,在替换文本时,环视特别有用,因为您不需要将周围环境包含在替换文本中.例如,要替换每个q未遵循的a u,qu您可以这样做

replace 'q([^u])' by 'qu\1'
Run Code Online (Sandbox Code Playgroud)

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

replace 'q(?!u)' by 'qu'
Run Code Online (Sandbox Code Playgroud)

只有q匹配和替换,所以不再需要在替换字符串中包含部分匹配.