尝试这个:
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)