3

我正在尝试在文本中搜索特定单词,然后在该单词周围添加一个 html 标签。例如,如果我有字符串“我去商店买苹果和橙子”,并想在苹果周围添加 html 粗体标签。

问题,我搜索字符串的单词存储在文本文件中,可以是大写,小写等。当我使用 preg_replace 执行此操作时,我设法正确替换它添加标签,但例如,如果我搜索 APPLES 和字符串包含“苹果”它会将格式从苹果更改为苹果,我希望格式保持不变。

我曾尝试使用 preg_replace 但我找不到保持相同单词大小写的方法。这就是我所拥有的:

foreach($keywords as $value)
    {
        $pattern = "/\b$value\b/i";
        $replacement = "<b>$value</b>";
        $new_string = preg_replace($pattern, $replacement, $string);
    }

因此,如果 $value 是 APPLES,它会将 $string 中苹果的每个大小写格式更改为大写,因为 $replacemant 中包含 $value,即“APPLES”。

我如何在案例格式保持不变且不必使用不同版本的案例格式进行多个循环的情况下实现这一点?

谢谢

4

3 回答 3

2

您可以使用$value文字字符串\0$0. 正如\n/ $n,对于一些 integer n,指回n第 th 个括号捕获组,\0/$0被扩展为整个匹配。因此,你会有

foreach ($keywords as $value) {
  $new_string = preg_replace("/\\b$value\\b/i", '<b>$0</b>', $string);
}

注意'<b>$0</b>'使用单引号。您可以在这里使用双引号,因为$0它不会被解释为对变量的引用,但我认为这更清楚。通常,您必须小心$在双引号字符串中使用 a ,因为除非您转义$as ,否则您通常会获得对现有变量的引用\$\b同样,您应该在模式的双引号内转义反斜杠;尽管在这种特定情况下并不重要,但通常反斜杠是双引号中的一个有意义的字符。

于 2012-09-09T23:28:26.423 回答
0

我可能误解了您的问题,但是如果您正在努力区分大写字母(APPLE)和小写字母(apple),那么您可以做的第一件事是将单词转换为大写字母,或者小写,然后运行测试以找到它并在其周围放置 HTML 标记。这只是我的猜测,也许我完全误解了这个问题。

于 2012-09-09T23:26:58.813 回答
0

代码中存在离题错误:结果值已在非第一次循环迭代时被重写。的结束值$new_string将只是最后一个替换。

于 2012-09-09T23:37:42.293 回答