validar regulares regular probar minimo expresiones expresion espacio ejemplos caracteres blanco alfanumerico java regex

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.