【问题标题】:replace all non word characters in utf8 string [duplicate]替换utf8字符串中的所有非单词字符[重复]
【发布时间】:2014-02-26 17:53:06
【问题描述】:

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

对于 ASCII:

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

UTF-8 有什么等价物吗?

【问题讨论】:

    标签: php regex


    【解决方案1】:

    您可以使用包含字母、数字和下划线的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}_]
    

    【讨论】:

    • 你能解释一下这个正则表达式吗?看来这项工作。我正在测试它。
    • +1,我不知道Xwd属性。
    • @M42:谢谢,所有的秘密都在这里:pcre.org/pcre.txt
    • @CasimiretHippolyte,感谢链接。
    【解决方案2】:

    使用 unicode 属性:

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

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

    【讨论】:

    • 它返回这个:�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�-�- for $url = preg_replace("/[^\p{L}\p{N}_]+/", "-", $url);
    • 必须是 "/[^\p{L}\p{N}_]+/u" ,但我不确定这两个答案有什么区别。
    • @UFO:是的,我忘记了处理 unicode 的 /u 修饰符。
    猜你喜欢
    • 1970-01-01
    • 2012-10-23
    • 1970-01-01
    • 2015-02-02
    • 2011-11-22
    • 2017-12-20
    • 2020-11-09
    • 1970-01-01
    • 2018-08-05
    相关资源
    最近更新 更多