Почему это регулярное выражение 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}"
));
Ответы
Ответ 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}"
- Удача.