突出显示字符串中的单词(如果它包含关键字)

php
2022-08-30 12:55:12

如何写剧本,哪个门奇整个单词,如果它包含关键字?例如:关键字“有趣”,字符串 - 鸟很有趣,结果 - 鸟是*有趣*。我做以下

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

但它只标明关键字。我的鸟很有趣


答案 1

试试这个:

preg_replace("/\w*?$keyword\w*/i", "<b>$0</b>", $str)

\w*?匹配关键字之前的任何单词字符(尽可能少)和关键字之后的任何单词字符。\w*

我建议你使用preg_quote来转义关键字:

preg_replace("/\w*?".preg_quote($keyword)."\w*/i", "<b>$0</b>", $str)

对于 Unicode 支持,请使用 u 标志,而不是 :\p{L}\w

preg_replace("/\p{L}*?".preg_quote($keyword)."\p{L}*/ui", "<b>$0</b>", $str)

答案 2

您可以执行以下操作:

 $str = preg_replace("/\b([a-z]*${keyword}[a-z]*)\b/i","<b>$1</b>",$str);

例:

$str = "Its fun to be funny and unfunny";
$keyword = 'fun';
$str = preg_replace("/\b([a-z]*${keyword}[a-z]*)\b/i","<b>$1</b>",$str);
echo "$str"; // prints 'Its <b>fun</b> to be <b>funny</b> and <b>unfunny</b>'

推荐