替换utf8字符串中的所有非单词字符

时间:2014-02-26 17:53:07

标签: php regex

如何在字符串中替换所有非单词字符(utf-8)?

表示ASCII:

$url = preg_replace("/\W+/", " ", $url);

是否有UTF-8的等价物?

2 个答案:

答案 0 :(得分:2)

使用unicode属性:

$url = preg_replace("/[^\p{L}\p{N}_]+/u", " ", $url);

\p{L}代表任何字母
\p{N}代表任何数字。

答案 1 :(得分:2)

您可以使用包含字母,数字和下划线的 Xwd 字符类:

$url = preg_replace('~\P{Xwd}+~u', ' ', $url);

如果您不想使用下划线,可以使用 Xan

\p{Xwd}(Perl单词字符)是预定义的字符类,\P{Xwd}是此类的否定。

u修饰符表示必须将字符串视为unicode字符串。

等价:

\p{Xan}        <=>     [\p{L}\p{N}]
\p{Xwd}        <=>     [\p{Xan}_]