sheet - ¿Por qué esta expresión regular de Java causa errores de "carácter de escape ilegal"?
java util regex (6)
Estoy trabajando en una solución a una pregunta anterior , lo mejor que pueda, utilizando expresiones regulares. Mi patrón es
"/d{4}/w{3}(0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]){2}"
Según NetBeans, tengo dos personajes de escape ilegales. Supongo que tiene que ver con / d y / w, pero ambos son válidos en Java. Quizás mi sintaxis para una expresión regular de Java está desactivada ...
La línea completa de código involucrada es:
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}"
));
¿Has probado esto?
//d{4}//w{3}(0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]){2}
¿Intentaste "//d"
y "//w"
?
-edit- Lol publiqué la respuesta correcta y me voté y luego me di cuenta de que se escapa de las barras invertidas, por lo que mi respuesta pareció incorrecta :)
¿Qué pasa con lo siguiente: //d{4}//w{3}(0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]){2}
Creo que necesitas agregar los dos accesos directos de escape en las clases de personajes. Intente esto: "[/d]{4}[/w]{3}(0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]){2}"
--Buena suerte.
Suponiendo que esta expresión regular está dentro de un literal de String
Java, necesita escapar de las barras invertidas para sus etiquetas /d
y /w
:
"//d{4}//w{3}(0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]){2}"
Esto se vuelve más, bueno, francamente, cuando quieres hacer coincidir las barras invertidas:
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
todo lo que necesitas hacer es poner
*/
ex: string ex = ''this is the character: *//s'';
Antes de tu personaje inválido y no 8 / !!!!!