roturas de nueva línea de Java expresiones regulares de búsqueda hacia atrás negativo

Bakkenrak:

Estoy tratando de validar direcciones de correo electrónico utilizando un patrón de expresión de búsqueda hacia atrás con el negativo. Más concretamente, sólo se permitirá a aquellos que no terminan en una secuencia específica @mydomain.de.

Esto funciona bien en la mayoría de mis cadenas de prueba. Sin embargo, la adición de una nueva línea al final de la cadena ( \r\n) parece romperlo, como lo hace partido dura no.

Soy consciente de que esto normalmente se podría resolver más fácilmente utilizando .endsWith(). Estoy intentando utilizar la expresión regular en un modelo de la anotación javax.

Pattern p = Pattern.compile("^.*(?<!@mydomain\\.de)$")

p.matcher("[email protected]").matches()  // => true
p.matcher("[email protected]\r\n").matches()  // => false

Yo esperaría que ambas cadenas para que coincida con lo que no terminen en la secuencia prohibida @mydomain.de

Andreas:

Por defecto, el punto ( .) comodín no coincide con caracteres de terminador de línea.

Esto significa que ^.*$no coincide con la segunda cadena.

Puede hacer que coincida con todos los caracteres especificando el DOTALLmodo de:

Pattern p = Pattern.compile("^.*(?<!@mydomain\\.de)$", Pattern.DOTALL)

O:

Pattern p = Pattern.compile("(?s)^.*(?<!@mydomain\\.de)$")

public static final int DOTALL

Permite dotall modo.

En el modo dotall, la expresión .coincide con cualquier carácter, incluyendo un final de línea. Por defecto, esta expresión no coincide con las terminaciones de línea.

Dotall modo también se puede activar a través de la expresión de la bandera incrustada (?s). (El s es un mnemónico para el modo "de una sola línea", que es lo que se llama en Perl.)

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=315273&siteId=1
Recomendado
Clasificación