regulares regular expressions expresiones java regex formatter

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].*";