怎么写脚本,如果它包含关键字那么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)
您可以执行以下操作:
$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)