0

我正在尝试编写一个正则表达式来接受拉丁/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");
    }
4

1 回答 1

1

什么不工作?模式不匹配还是有错误消息?

我首先看到的是,您已经转义了这么多字符,不需要转义,重要的字符也没有转义。

在一个字符类中,只有少数几个字符具有特殊含义[]-并且^当它位于第一个位置时。您还没有逃脱-,这可能会导致错误,因此请尝试:

String pattern = "^[a-zA-Z0-9*?$\\[\\]()|{}/'#~.,;\"<=>\\-@%&!+:~¡ £¤¥ §¿ ÄÅÆÇÉÑÖØÜßàäåæ èéìñòöøùü  ]+$";

接下来是:看看Unicode Properties/Scripts。例如,您可以使用\\p{L}匹配任何语言的字母。

String pattern = "^[\\p{L}\\p{M}0-9*?$\\[\\]()|{}/'#~.,;\"<=>\\-@%&!+:~¡ £¤¥ §¿]+$";

将匹配您在课堂上的所有字母等等

于 2013-05-07T06:41:45.140 回答