No dudes en compartir nuestro sitio y códigos con tus amigos, necesitamos tu ayuda para aumentar nuestra comunidad.
Solución:
Q
significa “comienzo de texto literal” (es decir, expresión regular “comilla abierta”)E
significa “fin del texto literal” (es decir, expresión regular “comilla de cierre”)
llamando al Pattern.quote()
método envuelve el string en Q...E
que convierte el texto en una expresión regular literal. Por ejemplo, Pattern.quote(".*")
coincidiría con un punto y luego un asterisco:
System.out.println("foo".matches(".*")); // true
System.out.println("foo".matches(Pattern.quote(".*"))); // false
System.out.println(".*".matches(Pattern.quote(".*"))); // true
El propósito del método es no requerir que el programador tenga que recordar los términos especiales Q
y E
y para agregar un poco de legibilidad al código, la expresión regular ya es lo suficientemente difícil de leer. Comparar:
someString.matches(Pattern.quote(someLiteral));
someString.matches("\Q" + someLiteral + "\E"));
Refiriéndose al javadoc:
Devuelve una cadena de patrón literal para la cadena especificada.
Este método produce una cadena que se puede usar para crear un patrón que coincida con el string s como si fuera un patrón literal.
Los metacaracteres o secuencias de escape en la secuencia de entrada no tendrán un significado especial.
los Pattern.quote
El método cita parte de un patrón de expresión regular para que la expresión regular lo interprete como string literales.
Supongamos que tiene alguna entrada de usuario en su programa de búsqueda y desea expresiones regulares para ello. Pero esta entrada puede tener caracteres inseguros, por lo que puede usar
Pattern pattern = Pattern.compile(Pattern.quote(userInput));
Este método no cita un Pattern
pero, como usted señala, envuelve un String
en comillas regulares.
Q
y E
, entre todos los demás, están completamente documentados en la página java.util.regex.Pattern Javadoc. Significan “comenzar qnota”, “mind quote” y marque una región donde todos los caracteres tengan el significado literal. La forma de usar el retorno de Pattern.quote
es darle de comer Pattern.compile
o cualquier otro método que acepte un patrón stringtal como String.split
.
Recuerda que tienes la opción de parafrasear si diste con el resultado.