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

Sim*_*mon 32 php

怎么写脚本,如果它包含关键字那么menchion整个单词?例如:关键字"fun",string - 鸟很有趣,结果 - 这只鸟很有趣*.我做以下事情

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

但它只是关键字.我的鸟是乐趣纽约

Gum*_*mbo 54

试试这个:

preg_replace("/\w*?$keyword\w*/i", "<b>$0</b>", $str)
Run Code Online (Sandbox Code Playgroud)

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

我建议您使用preg_quote以转义关键字:

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

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

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


cod*_*ict 5

您可以执行以下操作:

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

例:

$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>'
Run Code Online (Sandbox Code Playgroud)