我有一个自定义的PHP脚本,通过文本查找关键短语并使用preg_replace替换它们,但是我无法获得干净的正则表达式。
例如这句话:
狐狸跳过门控栅栏 因为它没有动手打开 大门。
我想要加粗gate
的所有实例,但要尊重像gated
这样的奇怪内容。如果可能的话,还要保留原始资本。
所以最终句子会这样读:
狐狸跳过门控栅栏 因为它没有动手打开 门。
这是我自己创建的正则表达式,你会发现它不会占用门。因为这个词后面的时期。而且正则表达式也不尊重任何原始大写字母。
$description = preg_replace("/ $keyphrase /", " <b>$keyphrase</b> ", $description, $limit);
答案 0 :(得分:1)
preg_replace_callback('/\b'.preg_quote($keyphrase, '/').'\b/i',
function ($matches) {
return "<b>" . $matches[0] . "</b>";
}, htmlspecialchars($subject));
您需要使用字边界(\b
)。别忘了:
preg_quote
)。编辑 PHP&lt; 5.3必须使用:
function cb($matches) {
return "<b>" . $matches[0] . "</b>";
};
preg_replace_callback('/\b'.preg_quote($keyphrase, '/').'\b/i', 'cb',
htmlspecialchars($subject));