PHP负面前瞻正则表达式无法正常工作

时间:2016-06-15 20:46:28

标签: php regex negative-lookahead

我正在尝试在我的PHP应用程序中构造一个带有变量的正则表达式,例如$search,并将其替换为另一个变量。我具体要做的是,只有在$search没有直接跟随=值时才替换preg_replace("/($search)(?!=)/i", $replacement, $string, -1, $count); 值。

到目前为止我尝试的是:

$searchTerm = "Hello";
$search = "/($searchTerm)(<?!=)/i";
$replacement = '<span style="background:red;">$0</span>';
$result = preg_replace($search, $replacement, $string, -1, $count);

但这没效果。我确定我只是误解了一些东西,但我似乎无法确定那是什么。我对正则表达式相当陌生,而且我已经看过以前问题中的几个答案而无法弄清楚。

如果您需要任何其他信息,请与我们联系。

修改

澄清一下,假设以下代码:

$string = "hello=hola";

其中$ string的值类似于:

"b1"

所以我的想法是,如果&#34;你好&#34;没有跟着&#39; =&#39;,然后它会用红色突出显示它,但如果是,则没有任何反应。假设$ string的值可以改变。非常蹩脚的例子,我知道,但希望它清除一点。

2 个答案:

答案 0 :(得分:1)

实际上,您需要在模式中用反斜杠$转义\个字符。另外,为了使其更加自信,您可以在\s*字符之前添加=,这意味着零个或多个空格。

使用此模式:

/\$search(?!\s*\=)/i

Online Demo

  • /分隔符
  • \$字面上匹配$
  • search字面匹配
  • (?!否定前瞻,检查该变量名后的空白(如果存在)=
  • /i modifire使模式不敏感a-zA-Z之间没有任何差异

注意:您必须对上面的模式使用单引号'/pattern/'。如果你想使用双引号",你应该再次转义反斜杠:

/\\$search(?!\\s*\\=)/i

答案 1 :(得分:0)

$是正则表达式中的一个锚点,用于匹配一行的结尾,所以因为它是一个特殊字符,所以你必须逃避它。

您可以使用:

preg_replace("/(\\$search)(?!=)/i", $replacement, $string, -1, $count);

preg_replace('/(\$search)(?!=)/i', $replacement, $string, -1, $count);

<强> Regex demo