我正在尝试编写一个正则表达式来接受拉丁语/ 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");
}
答案 0 :(得分:1)
什么不起作用?模式不匹配或是否有错误消息?
我首先看到你逃脱了这么多角色,不需要进行转义,也不会转义重要的角色。
在角色类中,当它位于第一个位置时,只有少数几个字符具有特殊含义[]-
和^
。您尚未转义-
,这可能会导致错误,请尝试:
String pattern = "^[a-zA-Z0-9*?$\\[\\]()|{}/'#~.,;\"<=>\\-@%&!+:~¡ £¤¥ §¿ ÄÅÆÇÉÑÖØÜßàäåæ èéìñòöøùü ]+$";
接下来是:看看Unicode Properties/Scripts。你可以,例如使用\\p{L}
匹配任何语言的字母。
String pattern = "^[\\p{L}\\p{M}0-9*?$\\[\\]()|{}/'#~.,;\"<=>\\-@%&!+:~¡ £¤¥ §¿]+$";
会匹配您在班级中的所有字母和更多!