Cheatsheet di Regex
Le espressioni regolari sono abbastanza compatte da rendere la sintassi più facile da cercare che da memorizzare. Questa pagina è tutto su un'unica schermata: classi, quantificatori, ancore, gruppi, lookaround, escape e flag - con un esempio funzionante per ogni riga.
Il sapore è JavaScript, che è ciò che viene eseguito nel tuo browser e ciò che utilizza il tester regex su questo sito. La maggior parte è identica in Python, Java, Go e PCRE; dove i sapori divergono, divergono sui bordi: supporto lookbehind, sintassi del gruppo con nome e se \d significa "cifra ASCII" o "qualsiasi cifra Unicode".
Due cose spiegano la maggior parte delle sorprese. I quantificatori sono avidi: prendono tutto ciò che possono e lo restituiscono solo quando il resto del pattern fallisce, motivo per cui <.+> inghiotte due tag e <.+?> no. E l'alternanza è quella più libera di tutte, quindi ^a|b$ significa "inizia con a o finisce con b" - non ciò che la maggior parte delle persone intende quando lo scrive.
Classi di caratteri
Le abbreviazioni sono solo ASCII a meno che non si aggiunga il flag u e si utilizzino gli escape della proprietà Unicode.
| Sintassi | Senso | Esempio |
|---|---|---|
| . | Qualsiasi carattere tranne un'interruzione di rigaAggiungi il flag s per farlo corrispondere anche alle nuove righe. | /a.c/"abc" → "abc" |
| \d | Una cifra, 0–9 | /\d+/"order 42" → "42" |
| \D | Tutto ciò che non è una cifra | /\D+/"42abc" → "abc" |
| \w | Lettera, cifra o carattere di sottolineaturaSolo ASCII — "é" non è \w. | /\w+/"user_1!" → "user_1" |
| \W | Qualsiasi cosa \w non corrisponde | /\W+/"a++b" → "++" |
| \s | Qualsiasi spazio bianco, incluse tabulazioni e ritorni a capo | /\s+/"a \t b" → " \t " |
| \S | Qualsiasi carattere diverso da uno spazio bianco | /\S+/" hi" → "hi" |
| [abc] | Uno qualsiasi dei personaggi elencati | /[aeiou]/"rhythm and" → "a" |
| [^abc] | Qualsiasi carattere tranne quelli elencati | /[^aeiou ]+/"aeiou xyz" → "xyz" |
| [a-z] | Una gamma di personaggi | /[a-f]+/"zzabcz" → "abc" |
| \p{L} | Qualsiasi lettera Unicode (è necessario il flag u) | /\p{L}+/"42 café" → "café" |
Quantificatori
Tutti questi sono avidi per impostazione predefinita: prendono tutto ciò che possono e restituiscono solo se il resto del modello fallisce.
| Sintassi | Senso | Esempio |
|---|---|---|
| * | Zero o più | /ab*/"a" → "a" |
| + | Uno o più | /ab+/"abbb" → "abbb" |
| ? | Zero o uno: lo rende facoltativo | /colou?r/"color" → "color" |
| {3} | Esattamente tre | /\d{3}/"id 12345" → "123" |
| {2,} | Due o più | /a{2,}/"aaa" → "aaa" |
| {2,4} | Tra le due e le quattro | /a{2,4}/"aaaaa" → "aaaa" |
| *? | Pigro: impiega il meno possibileL'avido <.+> ingoierebbe entrambi i tag. | /<.+?>/"<a><b>" → "<a>" |
Ancore e confini
Corrispondono a una posizione, non a un personaggio, quindi non consumano nulla.
| Sintassi | Senso | Esempio |
|---|---|---|
| ^ | Inizio della stringa, o di una linea con il flag m | /^a/"abc" → "a" |
| $ | Fine della stringa o di una riga con il flag m | /c$/"abc" → "c" |
| \b | Un confine di paroleQuesto è ciò che impedisce la corrispondenza di "cat" all'interno di "concatenate". | /\bcat\b/"the cat sat" → "cat" |
| \B | Non una parola di confine | /\Bcat/"concatenate" → "cat" |
Gruppi e alternanza
| Sintassi | Senso | Esempio |
|---|---|---|
| (abc) | Gruppo di cattura: ricordato per la sostituzione | /(\d+)-(\d+)/"10-20" → "10-20" |
| (?:abc) | Raggruppare senza catturareUsalo quando hai bisogno solo del raggruppamento; mantiene significativi i numeri di acquisizione. | /(?:ab)+/"abab" → "abab" |
| (?<name>…) | Gruppo di acquisizione denominato | /(?<year>\d{4})/"in 2026" → "2026" |
| a|b | Entrambi i lati: alternanzaL'alternanza ha la precedenza più bassa: ^a|b$ è "^a" o "b$", non "^(a|b)$". | /cat|dog/"one dog" → "dog" |
| \1 | Ritorno al primo gruppo | /(\w)\1/"letter" → "tt" |
Guardatevi intorno
Asserzioni su ciò che circonda una posizione. Non corrispondono a nulla da soli, il che è ciò che li rende sicuri da combinare.
| Sintassi | Senso | Esempio |
|---|---|---|
| (?=…) | Lookahead - seguito da questo | /\d+(?= kg)/"80 kg" → "80" |
| (?!…) | Lookahead negativo: non seguito da questo | /\d+(?! kg)/"80 lb" → "80" |
| (?<=…) | Guarda dietro – preceduto da questo | /(?<=\$)\d+/"costs $40" → "40" |
| (?<!…) | Lookbehind negativo – non preceduto da questo | /(?<!\$)\b\d+/"about 40" → "40" |
In fuga
Questi dodici caratteri sono quelli che necessitano di una barra rovesciata per essere presi alla lettera.
| Sintassi | Senso | Esempio |
|---|---|---|
| \. | Un punto letterale | /\d\.\d/"v2.5" → "2.5" |
| \\ | Una barra rovesciata letterale | /\\/"C:\\dir" → "\\" |
| \n | Un avanzamento riga | /a\nb/"a\nb" → "a\nb" |
| \t | Una scheda | /a\tb/"a\tb" → "a\tb" |
| \uFFFF | Un carattere in base al relativo punto di codice | /\u00e9/"café" → "é" |
Bandiere
| Bandiera | Nome | Senso |
|---|---|---|
| g | Globale | Trova ogni corrispondenza, non solo la prima. |
| i | Ignora maiuscole e minuscole | Corrisponde indipendentemente dal carattere maiuscolo o minuscolo. |
| m | Multilinea | Fa sì che ^ e $ corrispondano ad ogni interruzione di riga anziché solo alla fine della stringa. |
| s | Punto tutto | Lasciamo. anche le interruzioni della linea di corrispondenza. |
| u | Unicode | Tratta il modello come punti di codice e abilita gli escape della proprietà \p{…}. |
| y | Appiccicoso | Corrisponde solo esattamente all'ultimo indice, senza mai cercare in avanti. |