Una regex sbagliata in produzione costa ore di debug
Scrivere un'espressione regolare corretta al primo tentativo è raro. Edge case Unicode, differenze tra motori e parentesi mal chiuse causano bug silenziosi. Un tester online ti permette di verificare prima di deployare.
Tre casi d'uso principali:
- Validare un pattern prima dell'integrazione. Verifica che la tua regex faccia match con ciò che ti aspetti, e nient'altro.
- Fare il debug di un pattern esistente. Identifica perché una regex non cattura le sottostringhe corrette.
- Testare la compatibilità RE2. Conferma che il tuo pattern funzioni con il motore RE2 di Go prima del deploy.
Come usare il regex tester in 3 passaggi
Passaggio 1: Inserisci il pattern
Digita la tua espressione regolare nel campo dedicato. Esempio per estrarre un dominio SPF:
include:(?P<domain>[a-z0-9._-]+)
Passaggio 2: Incolla il testo di prova
Incolla il testo contro cui vuoi testare la tua regex:
v=spf1 include:_spf.captaindns.com include:spf.protection.outlook.com ~all
Attiva i flag se necessario (case-insensitive, multilinea, ecc.).
Passaggio 3: Leggi i risultati
Ogni corrispondenza appare con la sua posizione byte, il contenuto matchato e i gruppi di cattura. I gruppi nominati sono identificati dal loro nome.
Cos'è un'espressione regolare?
Un'espressione regolare (regex) è un pattern che descrive un insieme di stringhe. Permette di cercare, validare o estrarre testo secondo regole precise.
Componenti fondamentali:
| Elemento | Sintassi | Esempio | Risultato |
|---|---|---|---|
| Carattere letterale | a | abc in "abcdef" | matcha "abc" |
| Classe di caratteri | [a-z] | [0-9]+ in "porta 443" | matcha "443" |
| Quantificatore | +, *, ? | a+ in "aab" | matcha "aa" |
| Gruppo di cattura | (...) | (abc) in "xabcx" | cattura "abc" |
| Ancora | ^, $ | ^v=spf1 | matcha a inizio riga |
| Alternativa | a|b | cat|dog in "my cat" | matcha "cat" |
Esempio concreto con gruppi nominati:
(?P<protocol>https?)://(?P<domain>[a-z0-9.-]+)
Applicato a https://captaindns.com/tools:
- Gruppo
protocol:https - Gruppo
domain:captaindns.com
Sintassi RE2 vs PCRE: le differenze
RE2 (Go, Google) e PCRE (PHP, Python, Perl) differiscono su punti chiave. JavaScript usa un motore proprio, più vicino a PCRE per le funzionalità avanzate.
| Funzionalità | RE2 | PCRE |
|---|---|---|
| Tempo di esecuzione garantito | Lineare O(n) | Esponenziale possibile |
| Lookahead/lookbehind | Non supportato | Supportato |
Backreference (\1) | Non supportato | Supportato |
| Quantificatori possessivi | Non supportato | Supportato |
| Gruppi nominati | (?P<nome>...) | (?P<nome>...) o (?<nome>...) |
| Flag non-greedy globale | (?U) | Non standard |
| Unicode | Nativo (UTF-8) | Tramite flag u |
RE2 garantisce un tempo lineare. Questo elimina gli attacchi ReDoS (Regular Expression Denial of Service). Per questo è la scelta standard per i servizi web esposti a input non fidato.
Casi d'uso reali
Validare un record SPF
Situazione: Vuoi verificare che il tuo record SPF contenga i meccanismi include corretti.
Diagnosi: Testa il pattern include:([a-z0-9._-]+) contro il valore del tuo record TXT. Lo strumento elenca ogni dominio incluso con la sua posizione.
Azione: Confronta i domini estratti con la tua lista attesa. Un include mancante o errato diventa visibile immediatamente.
Estrarre indirizzi email da un testo
Situazione: Devi estrarre tutti gli indirizzi email da un file di configurazione o da un log.
Diagnosi: Usa il pattern [a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,} con il flag case-insensitive. Ogni email trovata appare come corrispondenza distinta.
Azione: Verifica che ogni indirizzo estratto sia legittimo. Controlla i falsi positivi come stringhe tipo user@localhost.
Debug di un pattern di log parsing
Situazione: Il tuo parser di log non cattura il timestamp nel formato corretto.
Diagnosi: Testa il pattern con gruppi nominati: (?P<date>\d{4}-\d{2}-\d{2}) (?P<time>\d{2}:\d{2}:\d{2}). Verifica che i gruppi catturino le sottostringhe attese.
Azione: Modifica i quantificatori o le classi di caratteri fino a ottenere i valori corretti nei gruppi.
Errori di sintassi comuni
| Errore | Causa | Correzione |
|---|---|---|
error parsing regexp | Parentesi non chiusa o quantificatore senza target | Verifica parentesi e parentesi quadre |
invalid escape sequence | Sequenza di escape non riconosciuta in RE2 | Usa \\ per un backslash letterale |
invalid named capture | Sintassi errata per un gruppo nominato | Usa (?P<nome>...) (non (?<nome>...)) |
invalid repeat count | Quantificatore fuori limite | Riduci il valore del quantificatore |
| Nessun risultato | Pattern troppo restrittivo o flag mancante | Attiva case-insensitive o dot-all |
❓ FAQ - Domande frequenti
D: Perché la mia regex non trova nessuna corrispondenza?
R: Verifica la sintassi RE2: lookahead/lookbehind e backreference non sono supportati. Attiva il flag "case-insensitive" se il tuo testo contiene maiuscole inaspettate. Controlla anche i caratteri speciali non escapati.
D: Cos'è la sintassi RE2?
R: RE2 è il motore regex di Go. Garantisce un tempo di esecuzione lineare rispetto alla dimensione dell'input. PCRE, invece, può essere vulnerabile ad attacchi ReDoS.
D: Quali flag regex sono disponibili?
R: Quattro flag: case-insensitive (i), multilinea (m), dot matcha newline (s) e non-greedy (U). Ogni flag modifica il comportamento del motore per l'intero pattern.
D: Qual è il limite di dimensione del testo?
R: Il pattern è limitato a 10 KB, il testo di prova a 1 MB. Il numero massimo di corrispondenze restituite è 1.000. Questi limiti proteggono il servizio da abusi.
D: Cos'è un gruppo di cattura nominato?
R: Un gruppo nominato usa la sintassi (?P<nome>...) in RE2. Permette di estrarre una sottostringa per nome invece che per indice numerico. È utile per pattern complessi con più gruppi.
D: RE2 è compatibile con le regex JavaScript?
R: Parzialmente. RE2 supporta classi di caratteri, quantificatori e gruppi. Funzionalità assenti: lookahead, lookbehind, backreference e quantificatori possessivi.
D: I dati vengono conservati?
R: No. Pattern e testo vengono inviati all'API CaptainDNS per l'elaborazione, poi eliminati. Nessun contenuto viene memorizzato né registrato nei log.
Strumenti complementari
| Strumento | Utilità |
|---|---|
| Hash Generator | Calcolare l'hash di un testo matchato dalla tua regex |
| Codificatore/decodificatore Base64 | Decodificare un testo Base64 prima di testarlo con una regex |
| Codificatore/decodificatore URL | Decodificare URL codificati prima dell'estrazione regex |
| Convertitore maiuscole/minuscole | Normalizzare le maiuscole di un testo prima di testarlo |
| Ispettore SPF | Verificare i record SPF estratti con regex |
Risorse utili
- RE2 syntax reference (sintassi completa del motore RE2)
- RFC 7208 - SPF (formato dei record SPF testabili con regex)
- Regular-Expressions.info (tutorial completo sulle espressioni regolari)
Impegno per la privacy
Il tuo pattern e il tuo testo vengono inviati all'API CaptainDNS esclusivamente per eseguire il test regex. Nessun contenuto viene conservato dopo l'elaborazione. Vengono registrate solo metriche tecniche anonime: dimensione del pattern, numero di corrispondenze, durata dell'esecuzione.