solo regulares regular probar palabra numeros letras extraer expresiones expresion exacta espacio ejemplos con cadenas blanco alfanumerico java regex escaping special-characters

probar - extraer cadenas con expresiones regulares java



Cómo escapar de un corchete para la compilación de patrones. (4)

Tengo una lista separada por comas de expresiones regulares:

.{8},[0-9],[^0-9A-Za-z ],[A-Z],[a-z]

He hecho una división en la coma. Ahora estoy tratando de hacer coincidir esta expresión regular con una contraseña generada. El problema es que a Pattern.compile no le gustan los corchetes que no se escapan. Algunos pueden darme una función simple que tome una cadena como esta: [0-9] y devuelva la cadena escapada /[0-9/] .


Por alguna razón, la respuesta anterior no funcionó para mí. Para aquellos como yo que vienen después, esto es lo que encontré.

Esperaba que una sola barra invertida escapara del corchete, sin embargo, debe usar dos si tiene el patrón almacenado en una cadena. La primera barra invertida escapa a la segunda en la cadena, de modo que lo que regex ve es /] . Como regex solo ve una barra invertida, la utiliza para escapar del corchete.

//]

En regex, que coincidirá con un corchete de cierre único.

Sin embargo, si está intentando hacer coincidir una nueva línea, por ejemplo, solo usará una barra invertida. Está utilizando el patrón de escape de cadena para insertar un carácter de nueva línea en la cadena. Regex no ve /n , ve el carácter de nueva línea y coincide con eso. Necesita dos barras invertidas porque no es una secuencia de escape de la cadena, es una secuencia de escape de expresiones regulares.


Puede usar los caracteres especiales / Q y / E ... todo lo que se encuentre entre / Q y / E se escapará automáticamente.

/Q[0-9]/E


Puedes usar Pattern.quote(String) .

De la documentación:

public static String quote​(String s)

Devuelve una String patrón literal para la String especificada.

Este método produce una cadena que se puede usar para crear un patrón que coincidiría con la cadena s como si fuera un patrón literal.

Los metacaracteres o las secuencias de escape en la secuencia de entrada no tendrán un significado especial.


Pattern.compile() le gustan los corchetes muy bien. Si tomas la cuerda

".{8},[0-9],[^0-9A-Za-z ],[A-Z],[a-z]"

y dividiéndolo en comas, terminará con cinco expresiones regulares perfectamente válidas: la primera coincide con ocho caracteres que no separan la línea, la segunda coincide con un dígito ASCII, y así sucesivamente. A menos que realmente quieras unir cadenas como ".{8}" y "[0-9]" , no veo por qué necesitarías escapar de nada.