此代码
$text = 'xxx AA BB xxx xäxAAx xBBBxóx ';
$words = array('AA BB', 'AA','BB');
$text = preg_replace('/('w*('.implode("|",$words).')'w*)/i', '[b]$1[/b]', $text);
返回xxx [b]AA BB[/b] xxx xä[b]xAAx[/b] [b]xBBBx[/b]óx
如何修改接收
xxx [b]AA BB[/b] xxx [b]xäxAAx[/b] [b]xBBBxóx[/b]
问题是与非字母数字字符,文件是在utf-8,文本是从mysql在utf-8
php中的'w
仅基于ASCII。将其替换为Unicode字符属性'p{L}
,它将工作。
$text = preg_replace('/('p{L}*('.implode("|",$words).')'p{L}*)/ui', '[b]$1[/b]', $text);
'p{L}
是一个Unicode字符属性,匹配任何语言的任何类型的字母
'w
也包含数字,如果你想这样,你需要创建自己的字符类,像这样:
['p{L}'d]
将匹配字母和数字
必须在pattern regex的末尾加上修饰符u
$text3 = preg_replace('/('w*('.implode("|",$words).')'w*)/iu', '[b]$1[/b]', $text);
,得到:
xxx [b]AA BB[/b] xxx [b]xäxAAx[/b] [b]xBBBxóx[/b]
模式修饰符可以看到这里