首页 文章

PHP:如果给定的字符串包含括号,则preg_replace不返回任何内容

提问于
浏览
0

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

    你试过这个吗?

    $search = "someg";
    $tag = "someguy_(artist)";
    $suggested = preg_replace('/'.$search.'/', '<span style="background: yellow;">'.$search.'</span>', $tag, 1);
    echo $suggested;
    

    在这种情况下,我认为不需要占位符

  • 0

    您的两个代码示例都没有任何捕获组(即 () 中的符号),这就是为什么 $1 可用 not . 只有 $0 可用,因此您的代码可以重写为:

    $suggested = preg_replace('/'.$search.'/', '<span style="background: yellow;">$0</span>', $tag, 1);
    echo $suggested;
    

    样本小提琴是here .

    Update :根据您的警告文本,您的括号是 $search 变量,而不是 $tag . 要避免此警告,请使用 preg_quote 转义括号:

    $suggested = preg_replace('/'.preg_quote($search).'/', '<span style="background: yellow;">$0</span>', $tag, 1);
    echo $suggested;
    

    另一个小提琴是here .

相关问题