2016-06-26 57 views
1

我想从具有unicode(非ASCII)字符的字符串中删除标点符号(通常为非单词字符)。删除/替换非单词字符时处理unicode

例如New $OrléansNew OrléansNewOrléans(如果空间被删除)

我来交叉使用至今\W\w(见PHP strip punctuation

我的挑战是保持统一的方法。如果我使用\WÎÎle-de-France获取删除/替换:

preg_replace('/\W+/', "-", 'Île-de-France')-le-de-France

是否可以除去非字字符和处理仍是单词字符非ASCII字符?

谢谢。

+1

使用''/ [^ \ p {M} \ w] +/u''。 –

+2

https://www.regex101.com/r/hV2qA2/1 – splash58

+0

如果您需要使用组合标记,请使用我的建议。否则,你的问题是重复的,因为这里有很多类似的问题关于'\ u'修饰符。 –

回答

1

如果你需要最安全的正则表达式来处理Unicode字母除去非单词字符时,使用

'/[^\p{M}\w]+/u' 

regex demo

的一点是,通过各种手段您需要的/u修改(使PCRE引擎能够将该模式和字符串视为Unicode字符串),并且\W不匹配组合标记

如果您不需要担心组合标记,则可以使用'/\W+/u'正则表达式来删除非单词字符。

此外,请参阅/u modifier reference

u (PCRE_UTF8)
这个修饰符打开PCRE的附加功能与Perl不兼容。模式和主题字符串被视为UTF-8。