我正在编写一个php脚本,该脚本根据给定的输入来猜测标签。返回猜测的标签时,我要突出显示用户搜索的标签部分。
$search = "fict";
$tag = "fiction";
$suggested = preg_replace('/'.$search.'/', '<span style="background: yellow;">$0</span>', $tag, 1);
echo $suggested;
返回<span style="background: yellow;">fict</span>ion
$search = "someg";
$tag = "someguy_(artist)";
$suggested = preg_replace('/'.$search.'/', '<span style="background: yellow;">$0</span>', $tag, 1);
echo $suggested;
但是,每当我使用带有括号的标签时,都不会返回任何内容。如何确保我的脚本适用于所有字符串输入?
编辑:我在先前的测试中使用过捕获组,但是我忘记将占位符更改为$ 0。但是,我的代码仍然不能在字符串中使用括号。
编辑2:我刚刚更改了错误级别,并在包含括号的代码部分得到了以下错误。 Warning: preg_replace(): Compilation failed: missing ) at offset 9 in C:\wamp64\www\project\includes\tags.php on line 18
答案 0 :(得分:0)
您尝试了此吗?
$search = "someg";
$tag = "someguy_(artist)";
$suggested = preg_replace('/'.$search.'/', '<span style="background: yellow;">'.$search.'</span>', $tag, 1);
echo $suggested;
在这种情况下,我认为不需要占位符
答案 1 :(得分:0)
您的两个代码示例都没有任何捕获组(即()
中的符号),因此{strong>不可用$1
。只有$0
可用,因此您的代码可以重写为:
$suggested = preg_replace('/'.$search.'/', '<span style="background: yellow;">$0</span>', $tag, 1);
echo $suggested;
样本小提琴是here。
更新:根据警告文字,您的括号是 $search
变量,而不是$tag
。为避免此警告,请使用preg_quote
括住括号:
$suggested = preg_replace('/'.preg_quote($search).'/', '<span style="background: yellow;">$0</span>', $tag, 1);
echo $suggested;
另一个小提琴是here。