PHP:如果给定的字符串包含括号

时间:2018-12-09 09:05:51

标签: php

我正在编写一个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 个答案:

答案 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