使用非字母数字字符
此代码使用非字母数字字符
回报
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,text来自utf-8中的mysql
\w
在PHP是基于纯ASCII。将其替换为Unicode字符属性\p{L}
,它将起作用。
$text = preg_replace('/(\p{L}*('.implode("|",$words).')\p{L}*)/ui', '[b]$1[/b]', $text);
\p{L}
是Unicode character property,从任何语言
\w
还包含数字匹配任何字母,如果你想这样,你需要创建一个这样自己的人物等级:
[\p{L}\d]
这将匹配字母和数字。
您必须在模式的末尾添加正则表达式的修饰符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]
模式修饰符你可以看到Here
你测试过了吗?在writecodeonline.com/php上,这将返回相同的不需要的结果。据我所知,'u'修饰符不会改变预定义字符类的行为。 – stema 2013-02-28 21:17:58
不工作,p {L}很好,如上 – user2117559 2013-02-28 21:24:13
很棒!谢谢 – user2117559 2013-02-28 21:22:50