突出显示字符串中的单词(如果它包含关键字)
2022-08-30 12:55:12
如何写剧本,哪个门奇整个单词,如果它包含关键字?例如:关键字“有趣”,字符串 - 鸟很有趣,结果 - 鸟是*有趣*。我做以下
$str = "my bird is funny";
$keyword = "fun";
$str = preg_replace("/($keyword)/i","<b>$1</b>",$str);
但它只标明关键字。我的鸟很有趣
如何写剧本,哪个门奇整个单词,如果它包含关键字?例如:关键字“有趣”,字符串 - 鸟很有趣,结果 - 鸟是*有趣*。我做以下
$str = "my bird is funny";
$keyword = "fun";
$str = preg_replace("/($keyword)/i","<b>$1</b>",$str);
但它只标明关键字。我的鸟很有趣
试试这个:
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)
您可以执行以下操作:
$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>'