日期:2014-05-20  浏览次数:20761 次

新手,求解正则表达式问题
Java code

public class Snippet {
    public static void main(String[] args) throws UnsupportedEncodingException {
        String a = new String("a\\");//匹配a\
        System.out.println(a.matches("[a\\]"));//报错
        System.out.println(a.matches("[\\u0041\\]"));//报错,这个是疯狂java讲义第339页给的正则匹配
    }
}


错误源代码:
Exception in thread "main" java.util.regex.PatternSyntaxException: Unclosed character class near index 8
[\u0041\]
  ^
at java.util.regex.Pattern.error(Pattern.java:1713)
at java.util.regex.Pattern.clazz(Pattern.java:2254)
at java.util.regex.Pattern.sequence(Pattern.java:1818)
at java.util.regex.Pattern.expr(Pattern.java:1752)
at java.util.regex.Pattern.compile(Pattern.java:1460)
at java.util.regex.Pattern.<init>(Pattern.java:1133)
at java.util.regex.Pattern.compile(Pattern.java:823)
at java.util.regex.Pattern.matches(Pattern.java:928)
at java.lang.String.matches(String.java:2090)
at com.chenlong.Snippet.main(Snippet.java:9)

在疯狂java讲义这本书的第340页,说的匹配中文字符[\\u0041-\\u0056],
先说转义的错误, 怎么会是两个\\了,本来\u就是转义了, 而且中文这么多,怎么
范围才这点,请大家解答,不会是我买到盗版的书籍了吧。

------解决方案--------------------
一对儿中括号匹配的是一个字符,正则表达式a\\匹配的是字符串a\,两个字符,所以中括号里放了匹配多个字符的正则当然就错了,你程序中的三句话都是这毛病
------解决方案--------------------
String a = new String("a\\");//匹配a\
System.out.println(a.matches("[a\\]"));// \\]相当于匹配]所以 前面那个框没结尾,报错
System.out.println(a.matches("[\\u0041\\]"));//下面这个框跟上面道理一样的。
------解决方案--------------------
String a = new String("\\");//这样就是对的
引号下面\\代表一个\
所以需要这样匹配"[\\\\]" 如果是指这种情况"[\\]"就会报错,跟我上面说的那种情况一样的错,把]搞丢了。
所以要得到一个\ 用这种"\\\\"或者这种"[\\\\\]"
------解决方案--------------------
public class job
{
public static void main(String[]args)
{
 
String a = new String("\\");
System.out.println(a.matches("[\\\\]"));

}
}