我想从包含unicode(非ASCII)字符的字符串中删除标点符号(通常是非字符)。
e.g。 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字符?
感谢。
答案 0 :(得分:1)
如果在删除非单词字符时需要最安全的正则表达式来处理Unicode字母,请使用
'/[^\p{M}\w]+/u'
请参阅regex demo
关键是无论如何你需要/u
修饰符(使PCRE引擎能够将模式和字符串视为Unicode字符串),而\W
会不匹配组合标记。
如果您不需要担心组合标记,可以使用'/\W+/u'
正则表达式删除非单词字符。
u (PCRE_UTF8)
的
此修饰符打开与Perl不兼容的PCRE的其他功能。模式和主题字符串被视为UTF-8。