我正在尝试在我的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的值可以改变。非常蹩脚的例子,我知道,但希望它清除一点。
答案 0 :(得分:1)
实际上,您需要在模式中用反斜杠$
转义\
个字符。另外,为了使其更加自信,您可以在\s*
字符之前添加=
,这意味着零个或多个空格。
使用此模式:
/\$search(?!\s*\=)/i
/
分隔符\$
字面上匹配$
search
字面匹配(?!
否定前瞻,检查该变量名后的空白(如果存在)和=
。/i
modifire使模式不敏感(a-z
和A-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 强>