Vai al contenuto
LeedyBox
Sostieni

Tester RegEx, sostituzione e promemoria

Testa espressioni regolari con corrispondenze e gruppi di cattura evidenziati, visualizza in anteprima le sostituzioni e copia il pattern come codice per sei linguaggi.

Flag
Corrispondenze: 0

Dettagli delle corrispondenze e gruppi di cattura

Promemoria

Fai clic su un pattern per caricarlo con un testo di esempio.

Riferimento della sintassi

Caratteri

.Qualsiasi carattere tranne un a capo (con s: inclusi gli a capo)
\d \DCifra 0–9 / non una cifra
\w \WCarattere di parola (A–Z, a–z, 0–9, _) / il contrario
\s \SSpazio bianco / non spazio bianco
[abc] [^abc]Uno tra a, b, c / qualsiasi tranne a, b, c
[a-z]Un carattere nell’intervallo da a a z
\p{L}Una lettera di qualsiasi lingua (richiede il flag u)
\. \\ \(Esegue l’escape di un carattere speciale per cercarlo alla lettera

Quantificatori

* + ?0 o più / 1 o più / 0 o 1
{n} {n,} {n,m}Esattamente n / n o più / tra n e m
*? +? {n,m}?Pigro: il minor numero possibile di caratteri

Ancore

^ $Inizio / fine del testo (di ogni riga con m)
\b \BConfine di parola / non confine di parola

Gruppi e lookaround

(…)Gruppo di cattura, usato come $1, $2 …
(?:…)Gruppo senza cattura
(?<name>…)Gruppo con nome, usato come $<name>
\1 \k<name>Backreference: lo stesso testo catturato da un gruppo
a|ba o b
(?=…) (?!…)Seguito da / non seguito da
(?<=…) (?<!…)Preceduto da / non preceduto da

Sostituzione

$1 $<name>Testo di un gruppo numerato o con nome
$& $$L’intera corrispondenza / un $ letterale

Verifica i risultati prima di usarli. Lo strumento è fornito così com’è, senza garanzia, e i risultati possono essere incompleti o errati. Termini di servizio

I pattern vengono testati con il motore di espressioni regolari di JavaScript. Sintassi e comportamento possono differire in altri linguaggi e database. I pattern del promemoria sono esempi pratici, non validatori completi.

Come si usa

  1. Inserisci il pattern in «Espressione regolare» senza le barre di delimitazione e i flag, e incolla il testo in «Testo di prova». Le corrispondenze vengono evidenziate in «Corrispondenze» e contate mentre scrivi. Per partire da un esempio, fai clic su un pattern del «Promemoria»: questo sostituisce il pattern, i flag, il testo di prova e le impostazioni di sostituzione correnti.
  2. Seleziona i flag che ti servono in «Flag»; passa il mouse su una lettera per vedere che cosa fa. All’apertura della pagina g e u sono attivi. Senza g viene trovata solo la prima corrispondenza, e viene sostituita solo quella.
  3. Leggi «Dettagli delle corrispondenze e gruppi di cattura»: ogni corrispondenza è elencata con la sua posizione e con il testo di ogni gruppo come $1, $2 e così via, insieme al nome dei gruppi con nome. Attiva il flag d per vedere anche dove inizia e finisce ogni gruppo.
  4. Per provare una sostituzione, seleziona «Sostituisci le corrispondenze con» e scrivi il testo sostitutivo, usando $1 o $<name> per i gruppi. Il testo modificato compare in «Risultato della sostituzione», e «Copia il risultato» lo copia.
  5. In «Generatore di codice», scegli JavaScript, Python, Java, PHP, Go o C# e fai clic su «Copia codice». Lo snippet include la sostituzione quando «Sostituisci le corrispondenze con» è selezionato. «Copia come /pattern/flag» copia il pattern come letterale regex di JavaScript.

Domande frequenti

Il testo che provo viene inviato da qualche parte?

No. Il pattern e il testo di prova vengono elaborati nel browser dal suo motore di espressioni regolari JavaScript e non vengono caricati su LeedyBox. Inoltre lo strumento non li salva.

Perché il mio pattern trova più testo del previsto?

Un pattern trova una corrispondenza ovunque si adatti, quindi \d{3} trova anche 123 dentro 12345. Aggiungi \b a entrambe le estremità per trovare solo parole o numeri completi, oppure usa ^ e $ per richiedere che corrisponda l’intero testo (o ogni riga, con m attivo), come fa il pattern della password nel promemoria. \b si basa sui caratteri di parola di \w (A–Z, a–z, 0–9 e _) e tratta lettere come é o 한 come caratteri che non fanno parte di una parola, quindi \bcafé\b non trova café quando è seguito da uno spazio. Inoltre i quantificatori come + e * sono greedy: su <b>x</b>, il pattern <.+> trova l’intera stringa, mentre <.+?> o <[^>]+> si ferma al primo >.

Perché un pattern che funziona in Python, PHP o Java qui dà un errore RegEx?

Questa pagina usa il motore di JavaScript, che rifiuta alcune sintassi di altri motori, come i gruppi con nome (?P<name>…), i flag in linea come (?i) all’inizio, i gruppi atomici (?>…) e i quantificatori possessivi come a++. Scrivi i gruppi con nome come (?<name>…) e usa le caselle in «Flag» invece dei flag in linea. Con il flag u, JavaScript è anche più rigoroso con gli escape: \# è un errore, e lo è anche \- fuori dalle parentesi quadre, quindi rimuovi la barra rovesciata o disattiva u.

Perché \p{L} non trova le lettere, o un’emoji conta come due caratteri?

Le classi di proprietà Unicode come \p{L} richiedono il flag u; senza, JavaScript legge \p{L} come il testo letterale p{L}, e . trova solo una metà di un carattere esterno al Basic Multilingual Plane, come molte emoji. Caricando un pattern del promemoria si caricano anche i suoi flag, e tutti tranne «Caratteri speciali» lasciano u disattivato, quindi controlla «Flag» prima di aggiungere questa sintassi. Anche con u, . trova un solo code point, e alcune emoji, come le bandiere o un pollice in su con una tonalità della pelle, sono composte da due o più code point. Le posizioni nei dettagli delle corrispondenze contano le unità di codice UTF-16, come fa JavaScript, quindi i caratteri esterni al Basic Multilingual Plane occupano due posizioni anche con u.

Perché \n nel testo sostitutivo non inserisce un a capo?

La sostituzione segue le regole di replace() di JavaScript: sono speciali solo le sequenze che iniziano con $, quindi \n e \t vengono inseriti come una barra rovesciata seguita da una lettera, non come un a capo o una tabulazione. Il campo contiene una sola riga, quindi qui non è possibile inserire un a capo; aggiungilo invece nel codice generato. Per eliminare le corrispondenze, seleziona «Sostituisci le corrispondenze con» e lascia il campo vuoto, come fa il pattern «Rimuovi tag HTML/XML» del promemoria.

Che cosa succede se un pattern è molto lento o trova un numero molto alto di corrispondenze?

Quando il browser consente i Web Worker, la ricerca viene eseguita in un worker in background e interrotta dopo 2 secondi, quindi un pattern con backtracking catastrofico, come (a+)+$ su una lunga fila di a seguita da un altro carattere, mostra un messaggio invece di bloccare la pagina. Il conteggio in «Corrispondenze» include tutte le corrispondenze, ma solo le prime 1.000 vengono evidenziate ed elencate nei dettagli.

Posso incollare il codice generato nel mio progetto così com’è?

Usalo come punto di partenza. Il generatore scrive il pattern come letterale regex in JavaScript e come stringa negli altri linguaggi, riscrive i gruppi con nome e i riferimenti nella sostituzione dove la sintassi è diversa, come (?P<name>…) e \g<1> in Python, converte i flag i, m e s e si aspetta l’input in una variabile chiamata text. Se il pattern contiene virgolette o barre, controlla che lo snippet ne esegua correttamente l’escape. I motori restano comunque diversi: il pacchetto regexp di Go usa la sintassi RE2, che non supporta lookaround né backreference, e il modulo standard re di Python non supporta le classi \p{…}, quindi prova il codice con i tuoi dati.