Saltar al contenido

¿Cómo escribo una expresión regular que excluye en lugar de coincidencias, por ejemplo, no (esta | cadena)?

Solución:

Esto no es posible fácilmente. Las expresiones regulares están diseñadas para fósforo cosas, y esto es todo lo que pueden hacer.

Antes que nada: [^] no designa un “grupo de exclusión”, designa una clase de carácter negada. Las clases de caracteres no admiten agrupaciones de ninguna forma. Admiten caracteres individuales (y, por conveniencia, rangos de caracteres). Tu intento [^(not|this)] es 100% equivalente a [^)(|hinots], en lo que respecta al motor de expresiones regulares.

Tres formas pueden salir de esta situación:

  1. fósforo (not|this) y excluir cualquier coincidencia con la ayuda del entorno en el que se encuentra (niegue los resultados de la coincidencia)
  2. use una vista previa negativa, si es compatible con su motor de expresiones regulares y es factible en la situación
  3. reescribe la expresión para que pueda fósforo: vea una pregunta similar que hice antes

En primer lugar: [^n][^o][^t] no es una solución. Esto también excluiría palabras como nil ([^n] no coincide), bob ([^o] no coincide) o cat ([^t] no coincide).

Pero es posible construir una expresión regular con sintaxis básica que coincida con cadenas que no contienen not ni this:

^([^nt]|n($|[^o]|o($|[^t]))|t($|[^h]|h($|[^i]|i($|[^s]))))*$

El patrón de esta expresión regular es permitir cualquier carácter que no sea el primer carácter de las palabras o solo los prefijos de las palabras pero no las palabras completas.

¡Es difícil creer que la respuesta aceptada (de Gumbo) fue realmente aceptada! A menos que fuera aceptado porque indicaba que no poder Haz lo que quieras. A menos que tenga una función que genere tales expresiones regulares (como muestra Gumbo), componerlas sería un verdadero dolor de cabeza.

¿Cuál es el caso de uso real? ¿Qué estás intentando hacer realmente?

Como indicó Tomalak, (a) esto no es lo que hacen las expresiones regulares; (b) consulte la otra publicación a la que se vinculó, para obtener una buena explicación, incluido qué hacer con respecto a su problema.

La respuesta es usar una expresión regular para que coincida con lo que haces. no desea, y luego reste eso del dominio inicial. IOW, no intente hacer que la expresión regular excluya (no puede); hacer la exclusión después usando una expresión regular para que coincida con lo que desea excluir.

Así es como funcionan todas las herramientas que utilizan expresiones regulares (p. Ej., grep): ofrecen una opción separada (por ejemplo, a través de la sintaxis) que lleva a cabo la resta, después de hacer coincidir lo que se debe restar.

¡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 *