Вопрос:
Картинка:
Ошибка:
C:UsersEamonprogrammingjava>javac shop/Main.java .shopCatalogue.java:41: error: illegal escape character Pattern.compile(«^[A-Za-z][d]{4}$»); ^ 1 error C:UsersEamonprogrammingjava>javac shop/Main.java .shopCatalogue.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
Лучший ответ:
вам нужно убежать d и p с дополнительной обратной косой чертой, поскольку они не являются допустимыми escape-последовательностями.
«^[A-Za-z][d]{4}$»
должно быть
«^[A-Za-z][d]{4}$»
а также
«^[A-Za-z][p{Digit}]{4}$»
должно быть
«^[A-Za-z][p{Digit}]{4}$» Ответ №1
Использовать escape-символ
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
В игре есть два уровня: вы пишете регулярное выражение внутри литерала строки Java в исходном файле. Прежде всего, часть Java String должна быть правильно экранирована, и здесь, где ошибка illegal escape character возникает из: d недействительна в любом литерале Java String, даже если вы пишете регулярное выражение. Компилятор javac – это тот, который собирается прочитать этот текст и преобразовать его во внутреннее значение String, и в этом значении будет неизолировано и на самом деле появится соответствующий d.
Во время выполнения, когда на самом деле создается регулярное выражение, оно увидит неизменяемое строковое значение, таким образом, d, которое будет правильно интерпретировано как десятичная ссылка.