DevToolPal
IT

Tester regex PCRE

Testa espressioni regolari compatibili con PHP / Perl con il vero motore PCRE2: ricorsione, quantificatori possessivi, \K e altro.

Eseguito in locale, mai caricato

Opzioni

Stringa di test

0 caratteri · 0 B

Risultato

Il risultato apparirà qui

Cosa fa questo strumento

Il tester di regex PCRE verifica un’espressione regolare sul tuo testo usando la vera libreria PCRE2, lo stesso motore usato da PHP, dagli strumenti in stile Perl e da molti server web. Le corrispondenze vengono evidenziate, ognuna è elencata con la sua posizione e i gruppi di cattura, e una sostituzione facoltativa mostra il risultato di una sostituzione in stile preg_replace.

Fare i test con il motore reale è importante perché le espressioni regolari PCRE e JavaScript differiscono in modi piccoli ma significativi. Un pattern che funziona in un tester basato sul browser può non compilare in PHP, oppure trovare qualcosa di diverso.

Come si usa

  1. Scrivi il pattern senza delimitatori in Pattern PCRE.
  2. Incolla il testo in cui cercare in Stringa di test.
  3. Attiva i modificatori che ti servono: g per tutte le corrispondenze (come preg_match_all), i, m, s, x, U, e u per \w, \d e \b compatibili con Unicode.
  4. Facoltativamente compila Sostituisci con per vedere in anteprima la sostituzione. Usa $1 o ${1} per i gruppi numerati, ${name} per i gruppi con nome e $0 per l’intera corrispondenza.

I pattern non validi mostrano il messaggio di errore di PCRE2 e la posizione nel pattern in cui si è fermato.

Esempio

Il pattern predefinito \((?:[^()]++|(?R))*\) trova parentesi bilanciate. Corrisponde a una coppia di parentesi che contiene caratteri diversi dalle parentesi oppure, ricorsivamente, di nuovo l’intero pattern. Sul testo di esempio trova (a, g(b, c)) e ((x), y) e ignora la parentesi non chiusa alla fine. Le espressioni regolari JavaScript non possono esprimere questo.

Prova (?<amount>\d+(?:\.\d+)?)\s+(?<cur>USD|EUR) con la sostituzione ${cur} $1 per scambiare importi e codici valuta nella seconda riga.

Funzionalità PCRE da conoscere

  • I quantificatori possessivi (*+, ++, ?+) e i gruppi atomici ((?>...)) non restituiscono mai ciò che hanno trovato, evitando il backtracking incontrollato.
  • \K azzera l’inizio della corrispondenza, una semplice alternativa al lookbehind.
  • La ricorsione con (?R), (?1) o (?&name) trova strutture annidate.
  • I modificatori inline come (?i) cambiano il comportamento per una parte del pattern.

Suggerimenti

  • In PHP racchiudi il pattern tra delimitatori come /.../ o ~...~ e scegline uno che non compaia nel pattern, così non devi farne l’escape.
  • Attiva u quando il testo contiene lettere accentate o caratteri CJK, così \w li riconosce.

Domande frequenti

› In cosa differisce dal tester di regex JavaScript?

Questa pagina esegue PCRE2, il motore dietro le funzioni preg_ di PHP, Nginx, Apache e molti altri strumenti, compilato in WebAssembly. Supporta sintassi che JavaScript non ha, come la ricorsione con (?R), i quantificatori possessivi come a++, i gruppi atomici, \K, i gruppi (?P<name>...) e i modificatori x e U.

› Devo scrivere i delimitatori, come /pattern/i?

No. Inserisci solo il pattern e attiva i modificatori con le caselle di spunta. In PHP, `preg_match('/\d+/i', $s)` corrisponde al pattern `\d+` con Ignora maiuscole/minuscole attivato.

› Perché ho ottenuto "match limit exceeded"?

Alcuni pattern, come ^(a+)+$ su una stringa lunga che non corrisponde, eseguono un numero esponenziale di backtracking. Il tester si ferma dopo cinque milioni di passi perché la pagina resti reattiva. PHP ha una protezione simile, pcre.backtrack_limit, e preg_match restituisce false quando viene raggiunta.

› Il mio testo viene caricato?

No. Il modulo WebAssembly di PCRE2 viene scaricato una volta e tutto viene eseguito nel tuo browser.