regulares - En una expresión regular de Java, ¿cómo puedo obtener una clase de caracteres, por ejemplo,[az] para que coincida con un signo menos?
probar expresiones regulares java (5)
Escape del signo menos [az / -]
Pattern pattern = Pattern.compile("^[a-z]+$");
String string = "abc-def";
assertTrue( pattern.matcher(string).matches() ); // obviously fails
¿Es posible hacer que la clase de caracteres coincida con un "-"?
Esto funciona para mí
Pattern p = Pattern.compile("^[a-z//-]+$");
String line = "abc-def";
Matcher matcher = p.matcher(line);
System.out.println(matcher.matches()); // true
Me gustaría volver a expresar el "no lo pongas entre los personajes" un poco más concretamente.
Convierta el tablero en el primer o último personaje de la clase de personaje. Por ejemplo, "[-a-z1-9]" coincide con minúsculas, dígitos o guiones.
No coloque el signo menos entre los caracteres.
"[a-z-]"
Dentro de una clase de caracteres [...]
a -
se trata especialmente (como un operador de rango) si está rodeada de caracteres en ambos lados. Eso significa que si incluyes el -
al comienzo o al final de la clase de personaje se tratará literalmente (no especial).
Entonces puedes usar la expresión regular:
^[a-z-]+$
o
^[-a-z]+$
Como el -
que agregamos está siendo tratado literalmente, no hay necesidad de escapar de él. Aunque no es un error si lo haces.
Otra forma (menos recomendada) es no incluir el -
en la clase de caracteres:
^(?:[a-z]|-)+$
Tenga en cuenta que los paréntesis no son opcionales en este caso como |
tiene una precedencia muy baja, por lo que con el paréntesis:
^[a-z]|-+$
Coincidirá con un alfabeto en minúscula al comienzo de la cadena y uno o más -
al final.