Saltar al contenido

cómo negar cualquier expresión regular en Java

Nuestro grupo especializado pasados varios días de investigación y de recopilar de datos, han obtenido la respuesta, deseamos que te sea útil en tu proyecto.

Solución:

Necesitas agregar anclas. La expresión regular original (menos los paréntesis innecesarios):

/.0,4

… coincide con un string que contiene una barra inclinada seguida de cero a cuatro caracteres más. Pero, debido a que está utilizando el matches() método se ancla automáticamente, como si fuera realmente:

^/.0,4$

Para lograr lo contrario, no puede confiar en el anclaje automático; tiene que hacer que al menos el ancla final sea explícito dentro de la anticipación. También tiene que “rellenar” la expresión regular con un .* porque matches() requiere que la expresión regular consuma todo string:

(?!/.0,4$).*

Pero le recomiendo que ancle explícitamente toda la expresión regular, así:

^(?!/.0,4$).*$

No hace daño y deja perfectamente clara su intención, especialmente para las personas que aprendieron expresiones regulares de otras versiones como Perl o JavaScript. El anclaje automático de la matches() método es muy inusual.

Sé que esta es una pregunta muy antigua, pero espero que mi respuesta pueda ayudar a cualquiera que busque esto en el futuro.

Mientras que la respuesta de Alan Moore es casi correcta. También necesitaría agrupar toda la expresión regular, o de lo contrario corre el riesgo de anclar solo una parte de la expresión regular original.

Por ejemplo, si desea negar la siguiente expresión regular: abc|def (que coincide con "abc" o "def"

anteponiendo (?! y anexando $).*. Terminarás con (?!abc|def$).*.

El ancla aquí solo se aplica a defsignifica que "abcx" no coincidirá cuando debería.

prefiero anteponer (?!(?:y anexar )$).*.

String negateRegex(String regex) 
    return "(?!(?:" + regex + ")$).*";

De mis pruebas parece negateRegex(negateRegex(regex)) de hecho sería funcionalmente lo mismo que regex.

Si te gustó nuestro trabajo, eres capaz de dejar una noticia acerca de qué te ha parecido esta sección.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *