带有unicode的preg_replace

时间:2015-08-06 13:29:45

标签: php regex unicode preg-replace

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

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

但我意识到它会破坏一些unicode角色。当字符串类似于此"höpöttää?!..."时,我会返回此"h�p�ttää",但没有标点符号,但会破坏字符。

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

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

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

1 个答案:

答案 0 :(得分:2)

不知道在那里做什么反击。

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

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

DEMO