Cómo negar toda la expresión regular?

Tengo una expresión regular, por ejemplo (ma|(t){1}) . Coincide con ma y t y no coincide con bla .

Quiero negar la expresión regular, por lo tanto, debe coincidir con bla y no con ma y t , agregando algo a esta expresión regular . Sé que puedo escribir bla , pero la verdadera expresión regular es más compleja.

Use un lookaround negativo: (?! pattern )

Las alternativas positivas se pueden usar para afirmar que un patrón coincide. Las vistas negativas son lo opuesto: se usa para afirmar que un patrón NO coincide. Algunos sabores apoyan las aserciones; algunos ponen limitaciones en mirar hacia atrás, etc.

Enlaces a regular-expressions.info

  • Previsiones de Look-and-Look y Look-behind-Zero-Wide
  • Comparación de sabor

Ver también

  • ¿Cómo convierto CamelCase en nombres legibles para humanos en Java?
  • Regex para todas las cadenas que no contienen una cadena?
  • Una expresión regular para hacer coincidir una subcadena que no es seguida por otra subcadena determinada.

Más ejemplos

Estos son bashs de encontrar soluciones de expresiones regulares para los problemas de los juguetes como ejercicios; Deben ser educativos si intenta aprender las diversas formas en que puede usar las alternativas (anidarlas, usarlas para capturar, etc.):

  • codingBat plusOut utilizando expresiones regulares
  • codingBat repeatEnd usando regex
  • codingbat wordEnds usando regex

Suponiendo que solo quiere rechazar cadenas que coincidan con la expresión regular por completo (es decir, mmbla está bien, pero mm no), esto es lo que quiere:

 ^(?!(?:m{2}|t)$).*$ 

(?!(?:m{2}|t)$) es un lookahead negativo; dice “comenzando desde la posición actual, los siguientes caracteres no son mm o t , seguidos por el final de la cadena”. El anclaje de inicio ( ^ ) al principio asegura que la búsqueda anticipada se aplica al comienzo de la cadena. Si eso tiene éxito, el .* Sigue adelante y consume la cadena.

FYI, si estás usando el método de matches() Java, realmente no necesitas el ^ y el $ final, pero no hacen ningún daño. Sin embargo, se requiere $ en la búsqueda anticipada.

 \b(?=\w)(?!(ma|(t){1}))\b(\w*) 

esto es para la expresión regular dada.
el \ b es para encontrar el límite de palabras.
la mirada positiva hacia adelante (? = \ w) está aquí para evitar espacios.
la mirada negativa hacia adelante sobre la expresión regular original es para evitar coincidencias de la misma.
y finalmente el (\ w *) es atrapar todas las palabras que quedan.
el grupo que contendrá las palabras es el grupo 3.
el patrón simple (?!) no funcionará ya que cualquier subcadena coincidirá
el simple ^ (?! (?: m {2} | t) $). * $ no funcionará ya que su granularidad es líneas completas

    Intereting Posts