【发布时间】:2016-10-28 11:42:34
【问题描述】:
我想从包含 unicode(非 ASCII)字符的字符串中删除标点符号和符号(通常是非单词字符)。
例如New $Orléans 到 New Orléans 或 NewOrléans(如果删除了空格)
到目前为止我遇到的方法使用\W或\w(参见PHP strip punctuation)
我面临的挑战是保留 unicode。如果我使用\W,Î 上的Île-de-France 将被删除/替换:
preg_replace('/\W+/', "-", 'Île-de-France') 给-le-de-France
是否可以删除非单词字符并仍然处理作为单词字符的非 ASCII 字符?
谢谢。
【问题讨论】:
-
使用
'/[^\p{M}\w]+/u'。 -
如果您需要使用组合标记,请使用我的建议。否则,您的问题是重复的,因为这里有很多关于
\u修饰符的类似问题。 -
@WiktorStribiżew 使用
\u可以解决问题。我已经看过\u,但不知道它是干什么用的。我还在一个使用character classes而不是POSIX的示例上进行了尝试,但它失败了。解决方案看起来很简单,但在搜索中没有直接的线索。可能您可以发表评论作为答案。它可以帮助某人。
标签: php regex string unicode preg-replace