2

我可以像这样突出显示字符串中的一个单词:

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

蚂蚁这会给我:我的鸟很有趣ny

但是当关键字来自多个单词时如何使这项工作发挥作用,例如当

$keyword = "bird fun";

我想得到这个结果:我的有趣

4

3 回答 3

5

正则表达式最基本的概念之一是交替。bird|fun将匹配birdfunimplode使用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';

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

于 2012-11-19T10:09:15.320 回答
5
$str = "my bird is funny";
$keyword = "bird fun";
$keyword = implode('|',explode(' ',preg_quote($keyword)));
$str = preg_replace("/($keyword)/i","<b>$0</b>",$str);

看见

于 2012-11-19T10:12:04.517 回答
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;
?>
于 2012-11-19T10:27:02.223 回答