我可以像这样突出显示字符串中的一个单词:
$str = "my bird is funny";
$keyword = "fun";
$str = preg_replace("/($keyword)/i","<b>$0</b>",$str);
蚂蚁这会给我:我的鸟很有趣ny
但是当关键字来自多个单词时如何使这项工作发挥作用,例如当
$keyword = "bird fun";
我想得到这个结果:我的鸟很有趣
我可以像这样突出显示字符串中的一个单词:
$str = "my bird is funny";
$keyword = "fun";
$str = preg_replace("/($keyword)/i","<b>$0</b>",$str);
蚂蚁这会给我:我的鸟很有趣ny
但是当关键字来自多个单词时如何使这项工作发挥作用,例如当
$keyword = "bird fun";
我想得到这个结果:我的鸟很有趣
正则表达式最基本的概念之一是交替。bird|fun
将匹配bird
或fun
。implode
使用and可以很容易地生成这种交替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';
这样,您根本不需要任何爆炸或内爆。
$str = "my bird is funny";
$keyword = "bird fun";
$keyword = implode('|',explode(' ',preg_quote($keyword)));
$str = preg_replace("/($keyword)/i","<b>$0</b>",$str);
试试这个:
<?
$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;
?>