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

时间:2009-05-27 20:08:22

标签: java regex

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

String clean(String input)
{
   return input==null?"":input.replaceAll("[^a-zA-Z ]","");
}
确实应该修复以支持非英语字符(例如ś,ũ,......)。不幸的是java正则表达式类(例如     “\ W” - 一个非单词字符,       “\ p {Alpha}” - 仅限-US-ASCII}。 )似乎不支持这一点。有没有办法用java正则表达式来做这个,而不是手动循环每个字符来测试它?

1 个答案:

答案 0 :(得分:2)

Java 6 Pattern处理Unicode,请参阅this doc

  

Unicode转义序列,如   \ u2014在Java源代码中   按照§3.3中的描述进行处理   Java语言规范。这样   还实现了转义序列   直接由正则表达式   解析器,以便Unicode转义可以   用于从中读取的表达式   文件或键盘。就这样   字符串“\ u2014”和“\\ u2014”,而   不相等,编译成相同的   模式,匹配角色   十六进制值为0x2014。

     

Unicode块和类别   用\ p和\ P结构编写   就像在Perl中一样。 \ p {prop}匹配如果   输入具有属性prop,而   如果输入,则P {prop}不匹配   有那个属性。块是   使用前缀In指定,如   InMongolian。类别可能是   使用可选前缀Is指定:   \ p {L}和\ p {IsL}都表示   Unicode字母的类别。块   和类别可以在里面使用   在一个角色类之外。