【问题标题】:preg_replace with unicodepreg_replace 用 unicode
【发布时间】:2015-10-29 16:23:16
【问题描述】:

我正在使用以下带有preg_replace 的正则表达式来去除任何标点符号的字符串:

$string = preg_replace("#((?!-|')\pP)+#", '', $string);

但我意识到它会破坏一些 unicode 字符。当字符串是这样的 "höpöttää?!..." 时,我会得到这个 "h�p�ttää",没有标点符号,但字符被破坏了。

我阅读了 PHP 文档并找到了一些使用 `...`u 修饰符的建议。所以我尝试了这个:

$string = preg_replace("`#((?!-|')\pP)+#`u", '', $string);

它确实解决了字符问题。但现在它停止删除标点符号。使用这个字符串"höpöttää?!...",我得到相同的"höpöttää?!..."

【问题讨论】:

    标签: php regex unicode preg-replace


    【解决方案1】:

    不知道反引号在那里做什么。

    $string = preg_replace("#(?![-'])\pP#u", '', $string);
    

    $string = preg_replace("#[^-'\PP]#u", '', $string);
    

    DEMO

    【讨论】:

    • 我不知道))。这就是 PHP 文档中的示例所建议的。谢谢,现在可以了!这是一个愚蠢的错误......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 2019-03-08
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    • 2021-06-14
    相关资源
    最近更新 更多