当preg_replace按预期工作时,PHP mb_ereg_replace不会被替换

Jit*_*hin 5 php regex pcre multibyte

我试图用字符串替换所有非单词字符与空字符串期望空格并将所有多个空格放在一起作为一个单独的空格.

以下代码执行此操作.

$cleanedString = preg_replace('/[^\w]/', ' ', $name);  
$cleanedString = preg_replace('/\s+/', ' ', $cleanedString);
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用mb_ereg_replace时,没有任何反应.

$cleanedString = mb_ereg_replace('/[^\w]/', ' ', $name);  
$cleanedString = mb_ereg_replace('/\s+/', ' ', $cleanedString);
Run Code Online (Sandbox Code Playgroud)

$ cleaningString与上面的$ name相同.我究竟做错了什么?

Art*_*cto 10

mb_ereg_replace不使用分隔符.您可能也可能不必在之前指定编码.

mb_regex_encoding("UTF-8");
//regex could also be \W
$cleanedString = mb_ereg_replace('[^\w]', ' ', $name);
$cleanedString = mb_ereg_replace('\s+', ' ', $cleanedString);
Run Code Online (Sandbox Code Playgroud)

  • @Jithin取决于你对"作品"的意思.它将严格意义上的工作 - 不会生成损坏的数据,但它可能不会做你想要的.考虑第一个正则表达式.在PCRE(引擎`preg_replace`使用)中,`\ w`只表示`[a-zA-Z0-9_]`.如果要消除所有非单词字符,更好的选择是使用`[^ ​​\ p {L}\p {Nd}\p {Mn} _]`.这将匹配所有不是(每个Unicode)字母,非间距标记(用于重音等),十进制数字和下划线的字符. (2认同)