突出显示字符串中的多个单

时间:2012-11-19 10:06:41

标签: php regex preg-replace

我可以在字符串中突出显示一个单词:

$str = "my bird is funny";
     $keyword = "fun";
     $str = preg_replace("/($keyword)/i","<b>$0</b>",$str);

Ant这会给我: 我的小鸟有趣 ny

但是当关键字来自多个单词时(例如

)时,如何使其工作
$keyword = "bird fun";

我想得到这样的结果:我的 有趣 nny

3 个答案:

答案 0 :(得分:5)

正则表达式的最基本概念之一是交替。 bird|fun将匹配birdfun。使用implodeexplode

可以轻松生成此更改
$keywords = explode(' ', trim($keyword));
$str = preg_replace('/'.implode('|', $keywords).'/i', '<b>$0</b>', $str);

正如pritaeas指出的那样,你也可以使用str_replace

$str = preg_replace('/'.str_replace(' ', '|', trim($keywords)).'/i', '<b>$0</b>', $str);

当然,如果您自己编写$keyword并且不在其他地方使用它,请立即将其写为正则表达式:

$keyword = 'bird|fun';

甚至

$keyword = '/bird|fun/i';

这样你根本不需要任何爆炸或内爆。

答案 1 :(得分:5)

$str = "my bird is funny";
$keyword = "bird fun";
$keyword = implode('|',explode(' ',preg_quote($keyword)));
$str = preg_replace("/($keyword)/i","<b>$0</b>",$str);

See it

答案 2 :(得分:1)

试试这个:

<?
$str = "my bird is funny";
     $keyword= array("bird","fun");
     foreach($keyword as $k=>$v)
{
     $str = preg_replace("/($v)/i","<b>$0</b>",$str);
}
//echo $str;
?>