I lookaround sono affermazioni di larghezza zero. Controllano la presenza di una regex (verso destra o sinistra della posizione corrente - basata su avanti o dietro), ha successo o fallisce quando viene trovata una corrispondenza (basata su se è positiva o negativa) e scarta la parte corrispondente. Non consumano alcun carattere - la corrispondenza per regex che li segue (se presente), inizierà nella stessa posizione del cursore.
Leggi regular-expression.info per maggiori dettagli.
Sintassi:
(?=REGEX_1)REGEX_2
Abbina solo se REGEX_1 corrisponde; dopo aver abbinato REGEX_1, l'incontro viene scartato e la ricerca di REGEX_2 inizia nella stessa posizione.
esempio:
(?=[a-z0-9]{4}$)[a-z]{1,2}[0-9]{2,3}
REGEX_1 [a-z0-9]{4}$
corrisponde a quattro caratteri alfanumerici seguiti dalla fine della riga.
REGEX_2 [a-z]{1,2}[0-9]{2,3}
corrisponde a una o due lettere seguite da due o tre cifre.
REGEX_1 si assicura che la lunghezza della stringa sia effettivamente 4, ma non consuma alcun carattere in modo che la ricerca di REGEX_2 inizi nella stessa posizione. Ora REGEX_2 si assicura che la stringa corrisponda ad altre regole. Senza guardare avanti corrisponderebbe a stringhe di lunghezza tre o cinque.
Sintassi:
(?!REGEX_1)REGEX_2
Abbina solo se REGEX_1 non corrisponde; dopo aver verificato REGEX_1, la ricerca di REGEX_2 inizia nella stessa posizione.
esempio:
(?!.*\bFWORD\b)\w{10,30}$
La parte di ricerca controlla FWORD
la stringa nella stringa e non riesce se la trova. Se non trova FWORD
, la ricerca ha esito positivo e la parte seguente verifica che la lunghezza della stringa sia compresa tra 10 e 30 e che contenga solo caratteri di parolea-zA-Z0-9_
Look-behind è simile al look-ahead: guarda solo dietro l'attuale posizione del cursore. Alcuni tipi di regex come javascript non supportano le affermazioni look-behind. E la maggior parte dei sapori che lo supportano (PHP, Python ecc.) Richiedono che la parte di ricerca abbia una lunghezza fissa.
- I gruppi atomici scartano / dimenticano sostanzialmente i token successivi nel gruppo una volta che un token corrisponde. Controlla questa pagina per esempi di gruppi atomici