Tengo una expresión regular, por ejemplo (ma|(t){1}). Coincide may tno coincide bla.
Quiero negar la expresión regular, por lo tanto, debe coincidir blay no may t, agregando algo a esta expresión regular . Sé que puedo escribir bla, sin embargo, la expresión regular real es más compleja.
regex
regex-negation
IAdapter
fuente
fuente

{1}es completamente inútil. (Si cree que proporciona algún valor, ¿por qué no escribe((m{1}a{1}){1}|(t){1}){1}?)Respuestas:
Utilice una mirada negativa:
(?!pattern)Se pueden utilizar revisiones positivas para afirmar que un patrón coincide. La búsqueda negativa es lo contrario: se usa para afirmar que un patrón NO coincide. Algún sabor apoya afirmaciones; algunos ponen limitaciones en mirar atrás, etc.
Enlaces a regular-expressions.info
Ver también
Más ejemplos
Estos son intentos de encontrar soluciones de expresiones regulares a problemas de juguetes como ejercicios; Deben ser educativos si está tratando de aprender las diversas formas en que puede usar los métodos alternativos (anidarlos, usarlos para capturar, etc.):
fuente
grep.Pattern.compile("(?!(a.*b))").matcher("xab").matches()debería sertrue, ¿verdad?Suponiendo que solo desea rechazar cadenas que coincidan con la expresión regular por completo (es decir,
mmblaestá bien, perommno lo está), esto es lo que desea:(?!(?:m{2}|t)$)es un negativo mirada hacia el futuro ; dice "a partir de la posición actual, los siguientes caracteres no sonmmot, seguidos del final de la cadena". El ancla de inicio (^) al principio garantiza que la búsqueda anticipada se aplique al principio de la cadena. Si tiene éxito,.*sigue adelante y consume la cuerda.FYI, si está utilizando el
matches()método de Java , realmente no necesita el^y el final$, pero no hacen ningún daño. Sin$embargo, se requiere el interior de la anticipación.fuente
.*al final de su expresión regular, de lo contrario rechazará todas las cadenas.$interior del avance negativo y.*el final son ambos bits críticos. Como siempre ocurre con los RE, un conjunto sólido de pruebas unitarias es absolutamente fundamental para hacerlo bien. Esta respuesta es 100% correcta.esto es para la expresión regular dada.
la \ b es 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.
y finalmente el (\ w *) es capturar todas las palabras que quedan.
el grupo que contendrá las palabras es el grupo 3.
el simple (?! patrón) no funcionará ya que cualquier subcadena coincidirá con
el simple ^ (?! (?: m {2} | t) $). * $ will no funciona ya que su granularidad es líneas completas
fuente