Tester di Espressioni Regolari
Le espressioni regolari (regex) sono pattern per la corrispondenza di testo. Questo strumento analizza la sintassi regex, spiega i componenti del pattern e fornisce un'area di test per provare le corrispondenze su testo di esempio. Supporta i formati regex JavaScript, PCRE e Python.
Specifiche
Casi d'uso comuni
- Debug del motivo per cui un regex non corrisponde al testo previsto
- Imparare la sintassi regex attraverso le spiegazioni
- Testare i pattern prima di aggiungerli al codice
- Validare i pattern di input per i campi dei form
- Estrarre dati da testo strutturato (log, CSV, HTML)
FunzionalitÃ
- Rilevamento del formato regex (JavaScript /pattern/flags, PCRE #pattern#, Python r"pattern")
- Spiegazione dei componenti del pattern in linguaggio semplice
- Test su testo di esempio con evidenziazione delle corrispondenze
- Modalita corrispondenza singola o trova tutte le corrispondenze
- Visualizzazione dei gruppi di cattura e del loro contenuto
- Visualizzazione dei gruppi di cattura denominati
- Visualizzazione delle posizioni e degli indici delle corrispondenze
- Visualizzazione del tempo di esecuzione regex
- Badge delle funzionalita del pattern (ancoraggi, quantificatori, ecc.)
- Avvisi sul pattern
- Libreria di pattern comuni (email, URL, telefono, ecc.)
Esempi
Pattern Email
Provalo →Un regex per la corrispondenza di indirizzi email.
/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/iSuggerimenti
- Usa tester online per il debug di pattern complessi prima della produzione.
- Esegui l'escape dei caratteri speciali (. ^ $ * + ? { } [ ] \ | ( )) con il backslash.
- I gruppi di cattura denominati (?<name>...) rendono le corrispondenze piu leggibili.
- Il flag g trova tutte le corrispondenze; senza di esso viene restituita solo la prima corrispondenza.
- Attenzione ai quantificatori avidi (* +); usa quelli pigri (*? +?) quando appropriato.
Approfondimenti Tester di Espressioni Regolari
Le espressioni regolari (regex) sono un linguaggio di corrispondenza dei pattern utilizzato in praticamente ogni linguaggio di programmazione, editor di testo e strumento da riga di comando. Un regex definisce un pattern di ricerca usando una combinazione di caratteri letterali e metacaratteri che corrispondono a classi di stringhe. Sono essenziali per la validazione degli input, l'estrazione di testo, le operazioni di ricerca e sostituzione e l'analisi dei log.
La sintassi di base include classi di caratteri ([a-z], \\d, \\w, \\s), quantificatori (*, +, ?, {n,m}), ancoraggi (^, $, \\b), alternanza (|) e raggruppamento con parentesi. I gruppi catturati estraggono le sottostringhe corrispondenti e abilitano i riferimenti all'indietro. I lookahead (?=...) e i lookbehind (?<=...) corrispondono alle posizioni senza consumare caratteri, consentendo asserzioni complesse sul contesto circostante.
Il regex JavaScript ha il suo dialetto con flag specifici: g (globale), i (case-insensitive), m (multilinea), s (dotAll), u (Unicode) e y (sticky). Il flag u e sempre piu importante per gestire correttamente il testo Unicode, poiche senza di esso i pattern potrebbero non corrispondere correttamente ai caratteri multibyte. I gruppi di cattura denominati (?<name>...) migliorano la leggibilita rispetto ai gruppi numerati.
I compiti regex comuni includono la validazione email, il parsing degli URL, l'estrazione di dati da testo strutturato (file di log, CSV) e la sostituzione di pattern nel refactoring del codice. Tuttavia, i regex hanno dei limiti — non possono analizzare strutture annidate come HTML o JSON (usa un parser appropriato), e i pattern eccessivamente complessi diventano illeggibili e difficili da manutenere. La battuta "ora hai due problemi" riflette sfide reali di manutenzione con regex complessi.
L'HTML e un linguaggio context-free con strutture annidate che le espressioni regolari fondamentalmente non possono gestire. Un regex non puo corrispondere correttamente ai tag di apertura e chiusura con profondita di annidamento arbitraria. I casi semplici possono sembrare funzionare ma falliscono nei casi limite che coinvolgono tag annidati, attributi contenenti > o commenti. Per l'elaborazione HTML, usa un parser DOM come DOMParser nel browser, cheerio per Node.js o BeautifulSoup per Python.
La differenza tra .* (avido) e .*? (pigro) e significativa per il comportamento di corrispondenza. L'avido .* corrisponde al maggior numero possibile di caratteri, poi torna indietro se necessario. Il pigro .*? corrisponde al minor numero possibile di caratteri. In una stringa come "<b>uno</b><b>due</b>", il pattern avido <b>.*</b> corrisponde all'intera stringa, mentre il pattern pigro <b>.*?</b> corrisponde solo al primo "<b>uno</b>". Scegliere la modalita sbagliata e una delle cause piu comuni di comportamento regex inaspettato.
In JavaScript, il flag u (/pattern/u) abilita la corrispondenza Unicode-aware. Senza di esso, il metacarattere . non corrisponde ai caratteri al di fuori del Basic Multilingual Plane (come le emoji), e \\w corrisponde solo ai caratteri parola ASCII. Il flag u fa si che i quantificatori e le classi di caratteri gestiscano correttamente le coppie surrogate e abilita gli escape delle proprieta Unicode come \\p{Letter}. I lookahead (?=...) e i lookbehind (?<=...) sono asserzioni a larghezza zero che controllano i pattern in una posizione senza includerli nella corrispondenza. Il lookahead positivo (?=...) asserisce cosa deve seguire, mentre il lookahead negativo (?!...) asserisce cosa non deve seguire. Ad esempio, \\d+(?= dollars) corrisponde ai numeri seguiti da " dollars" ma cattura solo il numero stesso. I lookbehind funzionano allo stesso modo ma controllano il testo precedente.