[英]PHP negative lookahead regex not working
我试图在我的PHP应用程序中构造一个正则表达式,该正则表达式采用一个变量,例如$search
,并将其替换为另一个变量。 我要特别尝试的是仅在$search
值不直接跟有=
替换它。
到目前为止,我尝试过的是:
preg_replace("/($search)(?!=)/i", $replacement, $string, -1, $count);
但这没有用。 我确定我只是误解了一些东西,但是我似乎无法确定那是什么。 我对regex相当陌生,并且已经查看了先前问题中的几个答案,但无法弄清楚。
如果您需要其他任何信息,请告诉我。
编辑
为了澄清,假设以下代码:
$searchTerm = "Hello";
$search = "/($searchTerm)(<?!=)/i";
$replacement = '<span style="background:red;">$0</span>';
$result = preg_replace($search, $replacement, $string, -1, $count);
$ string的值类似于:
$string = "hello=hola";
因此,我们的想法是,如果“ hello”后面没有加“ =”,它将以红色突出显示,但是如果没有,则什么也不会发生。 假设$ string的值可以更改。 我知道这是非常la脚的例子,但希望它能使它有所清除。
实际上,您需要在模式中使用反斜杠\\
来使$
字符转义。 另外,为了使其更加自信,您可以添加\\s*
,这表示=
字符之前有零个或多个空格。
使用以下模式:
/\$search(?!\s*\=)/i
/
分隔符 \\$
$
从字面上匹配$
search
从字面上匹配该词 (?!
否定的Lookahead,它检查在该变量名之后是否同时包含空格(如果存在)和=
。 /i
modifire使模式不敏感( az
和AZ
之间没有任何区别) 注意:上面的'/pattern/'
必须使用单引号'/pattern/'
。 如果要使用双引号"
,则应再次转义反斜杠:
/\\$search(?!\\s*\\=)/i
$
是正则表达式中的锚点,用于匹配行尾,因此,由于它是一个特殊字符,因此必须对其进行转义。
您可以使用:
preg_replace("/(\\$search)(?!=)/i", $replacement, $string, -1, $count);
要么
preg_replace('/(\$search)(?!=)/i', $replacement, $string, -1, $count);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.