Lookarounds son aserciones de ancho cero. Verifican si hay una expresión regular (hacia la derecha o hacia la izquierda de la posición actual, basada en adelante o atrás), tiene éxito o falla cuando se encuentra una coincidencia (en función de si es positiva o negativa) y descarta la parte coincidente. No consumen ningún carácter: la coincidencia para la expresión regular que los sigue (si corresponde) comenzará en la misma posición del cursor.
Lea regular-expression.info para más detalles.
Sintaxis:
(?=REGEX_1)REGEX_2
Coincidir solo si REGEX_1 coincide; después de hacer coincidir REGEX_1, la coincidencia se descarta y la búsqueda de REGEX_2 comienza en la misma posición.
ejemplo:
(?=[a-z0-9]{4}$)[a-z]{1,2}[0-9]{2,3}
REGEX_1 es el [a-z0-9]{4}$
que coincide con cuatro caracteres alfanuméricos seguidos por el final de la línea.
REGEX_2 es el [a-z]{1,2}[0-9]{2,3}
que coincide con una o dos letras seguidas de dos o tres dígitos.
REGEX_1 se asegura de que la longitud de la cadena sea de hecho 4, pero no consume ningún carácter para que la búsqueda de REGEX_2 comience en la misma ubicación. Ahora REGEX_2 se asegura de que la cadena coincida con algunas otras reglas. Sin mirar hacia adelante, coincidiría con cadenas de longitud tres o cinco.
Sintaxis:
(?!REGEX_1)REGEX_2
Coincidir solo si REGEX_1 no coincide; después de verificar REGEX_1, la búsqueda de REGEX_2 comienza en la misma posición.
ejemplo:
(?!.*\bFWORD\b)\w{10,30}$
La parte de anticipación verifica FWORD
la cadena y falla si la encuentra. Si no encuentra FWORD
, la búsqueda anticipada tiene éxito y la siguiente parte verifica que la longitud de la cadena esté entre 10 y 30 y que solo contenga caracteres de palabrasa-zA-Z0-9_
El mirar hacia atrás es similar al mirar hacia adelante: solo mira detrás de la posición actual del cursor. Algunos sabores de expresiones regulares como javascript no admiten aserciones de retrospectiva. Y la mayoría de los sabores que lo admiten (PHP, Python, etc.) requieren que la porción retrospectiva tenga una longitud fija.
- Los grupos atómicos básicamente descartan / olvidan los tokens posteriores en el grupo una vez que un token coincide. Consulte esta página para ver ejemplos de grupos atómicos.