图片:
错误:
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
答案 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
,它将被正确解释为小数引用。