为什么我收到此编译错误?

时间:2013-01-05 09:50:49

标签: java regex

图片:

http://puu.sh/1JNxE.png

错误:

C:\Users\Eamon\programming\java>javac shop/Main.java
.\shop\Catalogue.java:41: error: illegal escape character
            Pattern.compile("^[A-Za-z][\d]{4}$");
                                        ^
1 error

C:\Users\Eamon\programming\java>javac shop/Main.java
.\shop\Catalogue.java:41: error: illegal escape character
            Pattern.compile("^[A-Za-z][\p{Digit}]{4}$");
                                        ^
1 error

代码:

Pattern.compile("^[A-Za-z][\p{Digit}]{4}$"); 

参考:

http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html#sum

3 个答案:

答案 0 :(得分:7)

您需要使用额外的反斜杠转义\d\p,因为它们不是有效的转义序列。

"^[A-Za-z][\d]{4}$"

应该是

"^[A-Za-z][\\d]{4}$"

"^[A-Za-z][\p{Digit}]{4}$"

应该是

"^[A-Za-z][\\p{Digit}]{4}$"

答案 1 :(得分:0)

使用转义字符

Pattern.compile("^[A-Za-z][\\p{Digit}]{4}$"); 

Pattern.compile("^[A-Za-z][\\d]{4}$");

参考 LIVE DEMO

的示例
import java.util.regex.*;

public class Main {
  public static void main(String[] args) {
    Pattern replace = Pattern.compile("^[A-Za-z][\\d]{4}$");
    Matcher matcher1 = replace.matcher("A1234");
    System.out.println("Output of A1234 = " + matcher1.replaceAll("ITS REPLACED"));
    Matcher matcher2 = replace.matcher("F87652");
    System.out.println("Output of F87652 = " + matcher2.replaceAll("ITS REPLACED"));
  }
}

输出:

Output of A1234 = ITS REPLACED
Output of F87652 = F87652

答案 2 :(得分:0)

有两个级别:您在源文件中的 Java String文字中编写正则表达式。首先,必须正确转义Java String部分,以及illegal escape character错误来自的地方:\d在任何Java字符串文字中无效 ,即使你正在写一个正则表达式。 javac编译器是将要读取此文本并将其转换为内部String值的编译器,并且此值\\将不会被转义为正确的\d实际上会出现。

在运行时,当实际构造正则表达式时,它将看到未转义的字符串值,即\d,它将被正确解释为小数引用。