替换单词短语,在php中表示标点符号

时间:2010-08-22 22:59:05

标签: php

我有一个自定义的PHP脚本,通过文本查找关键短语并使用preg_replace替换它们,但是我无法获得干净的正则表达式。

例如这句话:

  

狐狸跳过门控栅栏   因为它没有动手打开   大门。

我想要加粗gate的所有实例,但要尊重像gated这样的奇怪内容。如果可能的话,还要保留原始资本。

所以最终句子会这样读:

  

狐狸跳过门控栅栏   因为它没有动手打开   

这是我自己创建的正则表达式,你会发现它不会占用门。因为这个词后面的时期。而且正则表达式也不尊重任何原始大写字母。

$description  = preg_replace("/ $keyphrase /", " <b>$keyphrase</b> ", $description, $limit);

1 个答案:

答案 0 :(得分:1)

preg_replace_callback('/\b'.preg_quote($keyphrase, '/').'\b/i',
    function ($matches) {
        return "<b>" . $matches[0] . "</b>";
    }, htmlspecialchars($subject));

您需要使用字边界(\b)。别忘了:

  • 正确转义在正则表达式中使用的关键短语(使用preg_quote)。
  • 正确转义HTML特殊字符的句子。假设您将文本字符串转换为HTML字符串,这是必要的。如果初始字符串已包含HTML,请勿使用正则表达式

编辑 PHP&lt; 5.3必须使用:

function cb($matches) {
    return "<b>" . $matches[0] . "</b>";
};
preg_replace_callback('/\b'.preg_quote($keyphrase, '/').'\b/i', 'cb',
   htmlspecialchars($subject));