Buscar..


Sintaxis

  • Lookahead positivo: (?=pattern)
  • Lookahead negativo: (?!pattern)
  • Mirada positiva detrás de : (?<=pattern)
  • Mirada negativa detrás de : (?<!pattern)

Observaciones

No es compatible con todos los motores de expresiones regulares.

Además, muchos motores de expresiones regulares limitan los patrones en el interior de las cuerdas de longitud fija. Por ejemplo, el patrón (?<=a+)b debe coincidir con la b en aaab pero arroja un error en Python.

Los grupos de captura están permitidos y funcionan como se espera, incluidas las referencias inversas. Sin embargo, el lookahead / lookbehind no es un grupo de captura.

Lo esencial

Un lookahead positivo (?=123) afirma que el texto es seguido por el patrón dado, sin incluir el patrón en la coincidencia. De manera similar, una mirada positiva detrás de (?<=123) afirma que el texto está precedido por el patrón dado. Sustituyendo el = con ! Niega la afirmación.


Entrada : 123456

  • 123(?=456) coincide con 123 ( lookahead positivo )
  • (?<=123)456 coincidencias 456 ( aspecto positivo detrás de )
  • 123(?!456) falla ( lookahead negativo )
  • (?<!123)456 falla ( aspecto negativo detrás de )

Entrada : 456

  • 123(?=456) falla
  • (?<=123)456 falla
  • 123(?!456) falla
  • (?<!123)456 partidos 456

Usando lookbehind para probar finales.

Se puede usar una mirada detrás del final de un patrón para asegurar que termine o no de cierta manera.

([az ]+|[AZ ]+)(?<! ) coincide con secuencias de solo letras en minúsculas o mayúsculas, excluyendo los espacios en blanco finales.

Simulando la apariencia de longitud variable detrás de \ K

Algunos sabores de expresiones regulares (Perl, PCRE, Oniguruma, Boost) solo son compatibles con el aspecto de longitud fija, pero ofrecen la función \K , que se puede usar para simular el aspecto de longitud variable al inicio de un patrón. Al encontrar un \K , el texto coincidente hasta este punto se descarta, y solo el texto que coincide con la parte del patrón que sigue a \K se mantiene en el resultado final.

ab+\Kc

Es equivalente a:

(?<=ab+)c

En general, un patrón de la forma:

(subpattern A)\K(subpattern B)

Termina siendo similar a:

(?<=subpattern A)(subpattern B)

Excepto cuando el subpatrón B puede coincidir con el mismo texto que el subpatrón A, podría terminar con resultados sutilmente diferentes, porque el subpatrón A todavía consume el texto, a diferencia de lo que se ve por detrás.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow