java正则表达式支持非ascii值?

我们有一个当前的方法可以清除不是字母或空格的字符

String clean(String input) { return input==null?"":input.replaceAll("[^a-zA-Z ]",""); } 

真的应该修复以支持非英语字符(例如ś,ũ,…)。 不幸的是,java正则表达式类(例如“\ W” – 非单词字符,“\ p {Alpha}” – 仅-US-ASCII}。)似乎不支持这一点。 有没有办法使用java正则表达式而不是手动循环每个字符来测试它?

Java 6 Pattern处理Unicode,请参阅此文档 。

Java源代码中的Unicode转义序列(例如\ u2014)将按照Java语言规范的§3.3中的描述进行处理。 这种转义序列也可以由正则表达式解析器直接实现,这样Unicode转义就可以用在从文件或键盘读取的表达式中。 因此字符串“\ u2014”和“\\ u2014”虽然不相等,但编译成相同的模式,该模式匹配具有hex值0x2014的字符。

Unicode块和类别使用Perl中的\ p和\ P结构编写。 如果输入具有属性prop,则\ p {prop}匹配,而如果输入具有该属性,则\ P {prop}不匹配。 使用前缀In指定块,如InMongolian中所示。 可以使用可选前缀Is指定类别:\ p {L}和\ p {IsL}都表示Unicode字母的类别。 块和类别可以在字符类的内部和外部使用。