неверная escape-последовательность ERROR - PullRequest
0 голосов
/ 24 мая 2018

Я работаю на REGEX для проверки домена.

Мое регулярное выражение выглядит следующим образом:

Pattern REGEX = Pattern.compile("^([a-z]*|\*)\.([a-z]*)\.([a-z]*)");

Хорошо работает здесь

n

но это дает мне ошибку в Java

enter image description here

Что не так с этимрегулярное выражение?

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Проблема с escape-последовательностями в регулярных выражениях Java, введенными как литералы, заключается в том, что они интерпретируются дважды:

  • Во-первых, компилятор Java интерпретирует каждую escape-последовательность как часть синтаксического анализа строковых литералов,
  • Во-вторых, движок Java Regex интерпретирует оставшиеся escape-последовательности как часть подготовки шаблона к сопоставлению

Важным следствием этого является то, что вы должны экранировать каждую косую черту в выражении, чтобы оно могло сделать егоот этапа компиляции Java до этапа компиляции regex:

Pattern REGEX = Pattern.compile("^([a-z]*|\\*)\\.([a-z]*)\\.([a-z]*)");

Возможно, это не самое читаемое решение, поэтому другой альтернативой будет использование классов символов вместо экранированных одиночных символов:

Pattern REGEX = Pattern.compile("^([a-z]*|[*])[.]([a-z]*)[.]([a-z]*)");
0 голосов
/ 24 мая 2018

\ является escape-символом в Java.Чтобы избежать этого, вы должны добавить дополнительный \ к вашему коду, например:

Pattern REGEX = Pattern.compile("^([a-z]*|\\*)\\.([a-z]*)\\.([a-z]*)");

Документы: Символы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...