在删除/替换非单词字符时处理unicode

时间:2016-06-26 10:07:25

标签: php regex string unicode preg-replace

我想从包含unicode(非ASCII)字符的字符串中删除标点符号(通常是非字符)。

e.g。 New $OrléansNew OrléansNewOrléans(如果空格已删除)

到目前为止我使用\W\w的方法(参见PHP strip punctuation

我所面临的挑战是保留unicode。如果我使用\W Î Île-de-France被删除/替换:

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

是否可以删除非单词字符并仍处理作为单词字符的非ASCII字符?

感谢。

1 个答案:

答案 0 :(得分:1)

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

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

请参阅regex demo

关键是无论如何你需要/u修饰符(使PCRE引擎能够将模式和字符串视为Unicode字符串),而\W会不匹配组合标记

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

另请参阅/u modifier reference

  

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