我正在尝试编写一个正则表达式来接受拉丁/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");
}
最佳答案
什么不起作用?模式不匹配或者是否有错误消息?
我首先看到的是,您已经转义了很多字符,这些字符不需要转义,而且一个重要的字符没有转义。
在字符类中,只有少数字符在第一个位置时具有特殊含义[]-
和^
。您尚未转义 -
,这可能会导致错误,因此请尝试:
String pattern = "^[a-zA-Z0-9*?$\\[\\]()|{}/'#~.,;\"<=>\\-@%&!+:~¡ £¤¥ §¿ ÄÅÆÇÉÑÖØÜßàäåæ èéìñòöøùü ]+$";
接下来是:看看 Unicode Properties/Scripts 。您可以例如使用 \\p{L}
匹配任何语言的字母。
String pattern = "^[\\p{L}\\p{M}0-9*?$\\[\\]()|{}/'#~.,;\"<=>\\-@%&!+:~¡ £¤¥ §¿]+$";
将匹配您在类里面的所有字母以及更多!
关于java - 正则表达式 - 接受拉丁/ucs2 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16412523/