我正在使用此功能替换短语中的坏词, 但除了UTF-8字符外,它适用于英文字母。
我发现\b
边界与utf-8字符无法正常工作。
有没有其他方法可以做到这一点?
我必须添加'\ b',因为我只需要替换确切的单词。
例如:不想用popo_one
替换p***o
我只需要用popo
替换p***o
。希望明白这一点。
public function wordfilter($phrase) {
$filter = array('/popo\b/i','/blabla\b/i');
$replace = array('p***o','b***a');
$newphrase = preg_replace($filter, $replace, $phrase);
return $newphrase;
}
任何想法都赞赏。
答案 0 :(得分:3)
\b
(单词边界)是\w
字符类中的字符与其他字符或字符串限制(开始或结束)之间的限制。
默认情况下\w
仅包含[a-zA-Z0-9_]
,但如果使用u修饰符,则\w
字符类将包含所有unicode字母和数字(并且等同于{{1} })。因此,使用此修饰符,[\p{L}\p{N}_]
的含义也会改变。
u修饰符具有第二个效果。有了它,模式和主题字符串不再被视为ascii字符串,而是作为utf8字符串。
u修饰符是两个指令的组合:\b
,用于更改速记字符类的含义((*UCP)
,\w
,\d
...)和\s
使得模式和主题字符串被读作utf8字符串。这些指令可以直接放在模式中,而不是使用u修饰符。