java - expressions - expresiones regulares html
La expresión regular no coincide con la nueva línea obtenida del objeto Formatter (2)
No puedo hacer coincidir una cadena que contiene nuevas líneas cuando la nueva línea se obtiene utilizando %n
en el objeto Formatter
o String.format()
. Por favor, eche un vistazo al siguiente programa:
public class RegExTest {
public static void main(String[] args) {
String input1 = String.format("Hallo/nnext line");
String input2 = String.format("Hallo%nnext line");
String pattern = ".*[/n/r].*";
System.out.println(input1+": "+input1.matches(pattern));
System.out.println(input2+": "+input2.matches(pattern));
}
}
y su salida:
Hallo
next line: true
Hallo
next line: false
¿Que esta pasando aqui? ¿Por qué no coincide la segunda cadena?
La versión de Java es 1.6.0_21.
En Windows, en Java, /n
es LF, /r
es CR y %n
es CRLF. Tu patrón no coincide con el último.
A partir de Java 8, ahora puede usar /R
en expresiones regulares para coincidir con cualquier secuencia de fin de línea.
Comparador de líneas
/R
Cualquier secuencia de salto de línea de Unicode, es equivalente a/u000D/u000A|[/u000A/u000B/u000C/u000D/u0085/u2028/u2029]
Ejemplo:
String pattern = ".*//R.*";
String.format("Hallo/nnext line").matches(pattern); // true
String.format("Hallo%nnext line").matches(pattern); // true
String.format("Hallo same line").matches(pattern); // false
Puede establecer el indicador Pattern.DOTALL
para hacer .
coincide con las nuevas líneas, por defecto no lo hace. Se hace con la notación (?s)
. Entonces, esta expresión regular hace lo que quieres:
String pattern = "(?s).*[/n/r].*";