Подтвердить что ты не робот

Почему это регулярное выражение Java вызывает ошибки "незаконного escape-символа"?

Я работаю над решением предыдущего вопроса, насколько это возможно, используя регулярные выражения. Моя модель

"\d{4}\w{3}(0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]){2}"

Согласно NetBeans, у меня есть два незаконных escape-символа. Я предполагаю, что это связано с \d и\w, но они оба действительны в Java. Возможно, мой синтаксис для регулярного выражения Java отключен...

Вся используемая строка кода:

userTimestampField = new FormattedTextField(
  new RegexFormatter(
    "\d{4}\w{3}(0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]){2}"
));
4b9b3361

Ответ 1

Предполагая, что это регулярное выражение находится внутри литерала Java String, вам нужно избежать обратных косых черт для тегов \d и \w:

"\\d{4}\\w{3}(0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]){2}"

Это становится больше, ну, бонкеры откровенно, когда вы хотите совпадения с обратными косыми чертами:

public static void main(String[] args) {        
    Pattern p = Pattern.compile("\\\\\\\\"); //ERM, YEP: 8 OF THEM
    String s = "\\\\";
    Matcher m = p.matcher(s);
    System.out.println(s);
    System.out.println(m.matches());
}

\\ //JUST TO MATCH TWO SLASHES :(
true

Ответ 2

Как насчет следующего: \\d{4}\\w{3}(0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]){2}

Ответ 3

Вы пробовали это?

\\d{4}\\w{3}(0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]){2}

Ответ 4

Вы пробовали "\\d" и "\\w"?

-edit- Lol Я опубликовал правильный ответ и проголосовал, а затем заметил, что stackoverflow избегает обратных косых черт, поэтому мой ответ оказался неправильным:)

Ответ 5

все, что вам нужно сделать, это поставить

 *\
 ex: string ex = 'this is the character: *\\s';

перед вашим недопустимым символом, а не 8 \!!!!!

Ответ 6

Я думаю, вам нужно добавить два экранированных ярлыка в классы символов. Попробуйте следующее: "[\d]{4}[\w]{3}(0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]){2}"

- Удача.