我正在编写一个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
2 回答
你试过这个吗?
在这种情况下,我认为不需要占位符
您的两个代码示例都没有任何捕获组(即
()
中的符号),这就是为什么$1
可用 not . 只有$0
可用,因此您的代码可以重写为:样本小提琴是here .
Update :根据您的警告文本,您的括号是 $search 变量,而不是
$tag
. 要避免此警告,请使用preg_quote
转义括号:另一个小提琴是here .