我可以在字符串中突出显示一个单词:
$str = "my bird is funny";
$keyword = "fun";
$str = preg_replace("/($keyword)/i","<b>$0</b>",$str);
Ant这会给我: 我的小鸟有趣 ny
但是当关键字来自多个单词时(例如
)时,如何使其工作$keyword = "bird fun";
我想得到这样的结果:我的鸟 有趣 nny
答案 0 :(得分:5)
正则表达式的最基本概念之一是交替。 bird|fun
将匹配bird
或fun
。使用implode
和explode
:
$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);
答案 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;
?>