Le espressioni regolari descrivono pattern di testo, e con dieci simboli si fa quasi tutto:
.un carattere qualsiasi ·\dcifra ·\wlettera/cifra/underscore ·\sspazio- quantificatori:
*(0+),+(1+),?(0 o 1),{2,4}(da 2 a 4) [abc]uno tra questi,[^abc]tutto tranne ·^inizio e$fine riga ·(...)gruppo,|oppure
Esempio letto ad alta voce: ^\d{2}-\d{2}$ = "riga fatta esattamente da due cifre, trattino, due cifre". Le due lezioni che evitano i dolori: i quantificatori sono golosi (.* mangia il più possibile: .*? per la versione parca), e l'escape dei caratteri speciali (\. per un punto vero) è dove nascono i bug silenziosi. Regola igienica: testa sempre su regex101 con casi veri, e commenta la regex per il te stesso del futuro.
Sono ovunque nella cassetta degli attrezzi: i filtri di fail2ban, le regole storiche dei WAF (patterns ne genera a tonnellate), grep e sed. E la nota di sicurezza: su input ostile una regex ingenua può esplodere (ReDoS) – è uno dei motivi per cui zion sfoggia un WAF zero-regex.