regular positive pattern not negative look literal exist example does around regex regex-lookarounds

regex - positive - Comprender el lookahead negativo



regex positive lookahead example (4)

Por lo tanto, en ese caso, la expresión regular coincide con cualquier cadena que contenga estrictamente 3 caracteres y no es la abc

Esto no es del todo correcto. Esta expresión expresa que estamos buscando una secuencia que firstsymbol es a y después de eso es c , y en el interior no hay b .

Por ejemplo, a(?!b). coincidirá con ac o af ya que no hay restricciones en el último símbolo a través de .

Estoy tratando de entender cómo funcionan los lookaheads negativos en ejemplos simples. Por ejemplo, considere la siguiente expresión regular:

a(?!b)c

Pensé que el lookahead negativo coincide con una posición. Entonces, en ese caso, la expresión regular coincide con cualquier cadena que contenga estrictamente 3 caracteres y no sea abc .

Pero no es cierto, como se puede ver en esta demostración . ¿Por qué?


@Antario, estaba confundido sobre el caso de la mirada negativa adelante / atrás en expresiones regulares por un tiempo y este sitio tiene una gran explicación.

Entonces, con su ejemplo, lo que está diciendo es que tiene una "a" literal y NO está seguida de una "b" literal, sino que está seguida de una "c" literal.

Aquí hay un depurador de expresiones regulares diferente al que usaste, lo que da una respuesta más visual que personalmente considero útil :)

a(?!b)c

Demostración de Debuggex


Lookaheads no consume ningún caracter. Solo comprueba si el lookahead puede coincidir o no:

a(?!b)c

Entonces aquí después de hacer coincidir a , simplemente verifica si no es seguido por b sino que no consume ese carácter (que es c ) y es seguido por c .

Cómo a(?!b)c coincide con ac

ac | a ac | (?!b) #checks but does not consume. Pointer remains at c ac | c

Mirada positiva

La anticipación positiva es similar en el sentido de que intenta hacer coincidir el patrón en la anticipación . Si se puede combinar, entonces el motor de expresiones regulares continúa emparejando el resto del patrón. Si no puede, el partido se descarta.

P.ej

abc(?=123)/d+ coincidencia abc123

abc123 | a abc123 | b abc123 c abc123 #Tries to match 123; since is successful, the pointer remains at c | (?=123) abc123 # Match is success. Further matching of patterns (if any) would proceed from this position | abc123 | /d abc123 | /d abc123 #Reaches the end of input. The pattern is matched completely. Returns a successfull match by the regex engine | /d


a(?!b)c coincidirá solo con ac porque la única forma en que tendrá una a seguida de "no b " (que no se consumirá) y luego c , es ac .