我正在尝试编写一个regex来接受拉丁/UCS2字符。但我在这样做的时候遇到了错误。在下面的代码中,应该为模式传递“text1”。我还在做这件事。有谁能帮我弄一下这个吗?
String text1 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz !\"#$%&'()*+,-./:;<=>?@"
+ "{|}~¡ ";
String pattern = "^[a-zA-Z0-9\\*\\?\\$\\[\\]\\(\\)\\|\\{\\}\\/\\'\\#\\~\\.,;\"\\<=\\>-@%&!+:~¡ ]+$";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(text1);
if (m.find()) {
System.out.println("true");
}发布于 2013-05-07 14:41:45
什么不起作用?模式是否不匹配,或者是否存在错误消息?
我首先看到的是,你已经转义了这么多字符,这些字符不需要转义,而且一个重要的字符没有转义。
在字符类中,只有少数字符在第一个位置时具有特殊的含义[]-和^。您尚未转义-,这可能会导致错误,因此请尝试:
String pattern = "^[a-zA-Z0-9*?$\\[\\]()|{}/'#~.,;\"<=>\\-@%&!+:~¡ £¤¥ §¿ ÄÅÆÇÉÑÖØÜßàäåæ èéìñòöøùü ]+$";下一件事是:看看Unicode Properties/Scripts。例如,您可以使用\\p{L}来匹配任何语言中的字母。
String pattern = "^[\\p{L}\\p{M}0-9*?$\\[\\]()|{}/'#~.,;\"<=>\\-@%&!+:~¡ £¤¥ §¿]+$";将匹配您的类和更多中的所有字母!
https://stackoverflow.com/questions/16412523
复制相似问题