logo
GeekFormat

Tester di Espressioni Regolari

Regex Tester
//
无匹配
Worker · 500ms 超时中断
分类模板库
点选即可填充 pattern / flags / demo
测试文本37
匹配详情
0

还没有匹配结果

输入正则与文本后,这里会展示每个匹配、捕获组和命名分组。

匹配高亮预览· Hover / 点击右侧条目联动
Ada Lovelace Alan Turing Grace Hopper

统计

匹配数量
0
执行耗时
0ms
捕获组
0
命名分组
0

命名分组汇总

当前没有命名分组。

Tester di espressioni regolari (Regex Tester) online gratuito, compatibile con test di corrispondenza in tempo reale JS, visualizzazione di gruppi di acquisizione/gruppi nominati, anteprima di sostituzione, spiegazione della sintassi regex, con protezione timeout anti-ReDoS integrata tramite Web Worker e libreria di modelli regex comuni, ideale per gli sviluppatori per eseguire rapidamente il debug e la validazione delle espressioni regolari.

Raccomandazioni correlate

Casi d'uso

  • Testare online se le espressioni regolari per e-mail, telefono, carta d'identità, URL ecc. sono corrette durante lo sviluppo di regole di validazione dei moduli
  • Estrarre timestamp, messaggi di errore e indirizzi IP da log di livello ERROR/INFO usando regex durante l'analisi dei log
  • Visualizzare in anteprima gli effetti di sostituzione regex durante la pulizia dei dati/ETL, come la conversione di formati data, l'oscuramento di informazioni sensibili (asterischi nel mezzo dei numeri di telefono)
  • Verificare se le regex di estrazione del contenuto corrispondono esattamente ai frammenti HTML o ai campi JSON target durante la scrittura di crawler web
  • Comprendere il significato di ogni metacarattere e quantificatore attraverso il pannello「Spiegazione」durante l'apprendimento delle espressioni regolari, e familiarizzare rapidamente con i modelli
  • Inviare espressioni regolari discutibili ai colleghi tramite link di condivisione durante i Code Review, per eseguire debug e ottimizzazione insieme

Funzionalità

  • Esecuzione in sandbox Web Worker: le regex girano in un thread Worker indipendente con interruzione automatica per timeout di 500 ms, impedendo completamente che il ReDoS blocchi il browser
  • Corrispondenza in tempo reale + evidenziazione colorata: i risultati vengono mostrati istantaneamente durante la digitazione, con 5 colori per distinguere diverse corrispondenze e pannello di dettagli collegato al passaggio del mouse
  • Gruppi di acquisizione + gruppi nominati: ogni corrispondenza viene espansa automaticamente per mostrare tutti i gruppi di acquisizione ($1/$2) e i gruppi nominati ($<name>), con statistiche riepilogative
  • Anteprima di sostituzione: inserisci una stringa di sostituzione per vedere un'anteprima in tempo reale, con pulsanti rapidi per la sintassi $1/$&/$`/$'/$<name>
  • Spiegazione della sintassi regex: analizza automaticamente l'espressione regolare e spiega elemento per elemento il significato di metacaratteri, quantificatori, gruppi, ancore ecc.
  • 12 modelli comuni: include 12 modelli regex frequenti come e-mail/URL/telefono/cinese/IPv4/UUID/data/log/tag HTML, compilabili con un clic
  • Alternanza di 6 flag: pulsanti visivi per alternare g/i/m/s/u/y, senza bisogno di memorizzare la sintassi
  • Link di condivisione: genera un URL contenente pattern/flags/text con un clic, copialo ai colleghi per riprodurre direttamente lo scenario di test
  • Statistiche di esecuzione: mostra in tempo reale il numero di corrispondenze, tempo di esecuzione (ms), numero totale di gruppi di acquisizione e quantità di gruppi nominati
  • Limite di 1500 corrispondenze: troncamento automatico per evitare rallentamenti della pagina dovuti a testo troppo lungo, e messaggi di errore amichevoli per regex con errori di sintassi

Come utilizzare

  1. Inserisci un'espressione regolare nel campo di input tra / / in alto (non è necessario aggiungere tu le barre), inserisci i flag (come g, gi, gim) a destra o clicca sui pulsanti sottostanti per alternarli
  2. Incolla o inserisci il contenuto di testo da far corrispondere nell'area「Testo di prova」; i risultati della corrispondenza saranno evidenziati a colori in tempo reale
  3. Clicca sul pannello「Dettagli corrispondenza」a destra per vedere la posizione, il contenuto, i gruppi di acquisizione e i gruppi nominati di ogni corrispondenza
  4. Passa alla scheda「Area di sostituzione」, inserisci una stringa di sostituzione (compatibile con riferimenti come $1/$&/$<name>) e visualizza in anteprima il risultato della sostituzione in tempo reale
  5. Passa alla scheda「Spiegazione espressione」per vedere la spiegazione elemento per elemento della sintassi regex generata automaticamente
  6. Quando hai bisogno di modelli comuni, clicca su「Libreria modelli per categoria」a sinistra per selezionare il modello corrispondente e compilarlo con un clic; dopo il debug, clicca su「Condividi」per generare un link

Domande frequenti

Cos'è il ReDoS? Perché i test regex necessitano di protezione contro il ReDoS?

Il ReDoS (Regular Expression Denial of Service, negazione del servizio tramite espressione regolare) si verifica quando alcune espressioni regolari costruite maliziosamente (come `(a+)+$` nella corrispondenza di stringhe lunghe) innescano un backtracking catastrofico (catastrophic backtracking), causando un utilizzo della CPU al 100%, blocco del browser o crash del server. Questo strumento esegue la corrispondenza regex in una sandbox Web Worker con interruzione automatica per timeout di 500 ms, quindi anche se inserisci un'espressione dannosa che innesca il backtracking, non bloccherà il tuo browser; questa è la funzionalità di sicurezza principale di questo strumento.

Cosa significano i sei flag g, i, m, s, u, y nelle espressioni regolari?

g (global) corrispondenza globale, cerca tutte le corrispondenze invece della prima; i (ignoreCase) ignora maiuscole/minuscole; m (multiline) modalità multilinea, fa sì che ^ e $ corrispondano all'inizio/fine di ogni riga; s (dotAll) fa sì che il punto . corrisponda a tutti i caratteri, inclusi i caratteri di nuova riga; u (unicode) modalità Unicode, elabora correttamente emoji e caratteri multibyte; y (sticky) corrispondenza appiccicosa, corrisponde esattamente dalla posizione lastIndex. Questo strumento fornisce pulsanti visivi per alternare i 6 flag; clicca per attivarli/disattivarli in tempo reale.

Cosa sono i gruppi di acquisizione e i gruppi nominati? Come si usano?

I gruppi di acquisizione sono racchiusi tra parentesi `(pattern)`, e dopo la corrispondenza le sottostringhe possono essere estratte usando riferimenti come $1, $2. I gruppi nominati usano la sintassi `(?<name>pattern)`, e dopo la corrispondenza possono essere referenziati con `$<name>`, migliorando la leggibilità del codice. Ad esempio, dopo aver fatto corrispondere una data con `(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})`, puoi riformattarla nella stringa di sostituzione con `$<year>年$<month>月$<day>日`. Questo strumento elenca automaticamente i risultati dei gruppi di acquisizione e dei gruppi nominati di ogni corrispondenza.

Quali sintassi regex di linguaggi di programmazione sono supportate?

Questo strumento è basato sul motore RegExp nativo di JavaScript ed è ampiamente compatibile con la sintassi dei motori principali come JS/TypeScript, il modulo re di Python, java.util.regex di Java, PHP preg_*, Go regexp (tutti basati sulla corrente PCRE/Perl). Le principali differenze risiedono in alcune funzionalità avanzate (come la sintassi dei gruppi nominati `(?P<name>)` in Python, lookbehind a lunghezza variabile in .NET). Il 99% delle espressioni regolari nello sviluppo quotidiano (validazione/estrazione di e-mail, telefoni, URL, date ecc.) sono universali tra i motori, e puoi testarle direttamente in questo strumento e poi copiarle nel tuo codice.

Come condividere un'espressione regolare testata con i colleghi?

Clicca sul pulsante「Condividi」nella barra degli strumenti superiore; lo strumento codificherà automaticamente l'espressione regolare corrente, i flag e il testo di prova nei parametri dell'URL e copierà il link negli appunti. Quando i tuoi colleghi aprono il link, vedranno esattamente lo stesso stato di test (pattern+flags+testText), ideale per la collaborazione di squadra e il debug remoto.

Cosa significano i simboli speciali $1, $&, $`, $' nelle stringhe di sostituzione?

Nelle stringhe di sostituzione: $1, $2... rappresentano l'N-esimo gruppo di acquisizione; $& rappresenta tutto il testo corrispondente; $` rappresenta la parte prima del testo corrispondente; $' rappresenta la parte dopo il testo corrispondente; $$ rappresenta il carattere letterale $; $<name> rappresenta un gruppo nominato. Ad esempio, sostituire `(\d{4})-(\d{2})-(\d{2})` con `$2/$3/$1` converte 2026-03-12 in 03/12/2026. L'area di sostituzione di questo strumento fornisce pulsanti di inserimento rapido per questi simboli speciali.

Cos'è un'Espressione Regolare (Regex/RegExp)?

Un'espressione regolare (abbreviata Regex/RegExp) è un linguaggio di pattern di testo che utilizza una singola stringa per descrivere e far corrispondere una serie di stringhe che soddisfano determinate regole sintattiche. La sua storia risale agli anni '50, quando il neurologo Warren McCulloch e il matematico Walter Pitts proposero un modello matematico di neuroni; più tardi, il matematico Stephen Kleene propose nel 1956 una descrizione algebrica degli「insiemi regolari」basata su di esso. Ken Thompson, padre di Unix, implementò per la prima volta le espressioni regolari nell'editor QED alla fine degli anni '60, e da allora le espressioni regolari sono diventate una funzionalità centrale della toolchain Unix (grep, sed, awk, vi).

Nei linguaggi di programmazione moderni, le espressioni regolari sono quasi una funzionalità standard — RegExp di JavaScript, il modulo re di Python, java.util.regex di Java, la classe Regex di .NET, il pacchetto regexp di Go forniscono supporto regex. Le espressioni regolari sono ampiamente utilizzate nella validazione di moduli (e-mail/telefono/carta d'identità), ricerca e sostituzione di testo (trova e sostituisci negli editor), analisi di log (estrarre log ERROR), web crawling (estrazione di contenuto HTML), pulizia dei dati (ETL), corrispondenza di route, filtraggio dell'input e protezione della sicurezza (regole WAF) e altri scenari.

I concetti centrali delle espressioni regolari includono: classi di caratteri (\d cifre, \w caratteri di parola, \s spazi bianchi), quantificatori (* zero o più, + uno o più, ? zero o uno, {n,m} numero specificato), ancore (^ inizio, $ fine, \b confine di parola), gruppi ((...) gruppo di acquisizione, (?:...) gruppo senza acquisizione, (?<name>...) gruppo nominato), alternanza (|), insiemi di caratteri ([a-z]), lookaround ((?=...) lookahead positivo, (?!) lookahead negativo) ecc. Padroneggiare regex può aumentare notevolmente l'efficienza dell'elaborazione del testo, ma devi anche fare attenzione ad evitare trappole di prestazioni come il ReDoS.

术语表

Regex / RegExp
Abbreviazione di Regular Expression (espressione regolare), una sintassi di stringa che descrive pattern di corrispondenza di testo, utilizzata per cercare, sostituire e validare il testo.
Gruppo di Acquisizione (Capture Group)
Sottoespressione racchiusa tra parentesi (pattern), i risultati corrispondenti possono essere referenziati per posizione usando $1, $2.
Gruppo Nominato (Named Group)
Gruppo di acquisizione definito con la sintassi (?<name>pattern), può essere referenziato per nome usando $<name>, con maggiore leggibilità rispetto ai riferimenti numerici.
ReDoS
Regular Expression Denial of Service (negazione del servizio tramite espressione regolare), causato da backtracking catastrofico che fa crescere esponenzialmente il tempo di esecuzione regex, bloccando il browser o il server.
Backtracking
Meccanismo del motore NFA per cui, quando un tentativo di corrispondenza fallisce, torna a posizioni precedenti per provare altre possibilità; regex complesse possono causare backtracking esponenziale.
Flag
Parametri che modificano il comportamento di corrispondenza regex; comuni sono g(globale), i(ignora maiuscole/minuscole), m(multilinea), s(dotAll), u(Unicode), y(appiccicoso).
Lookaround
Asserzioni a larghezza zero, tra cui lookahead positivo (?=...), lookahead negativo (?!...), lookbehind positivo (?<=...), lookbehind negativo (?<!...), giudicano solo la posizione senza consumare caratteri.
PCRE
Perl Compatible Regular Expressions (espressioni regolari compatibili con Perl), uno standard di sintassi regex ampiamente utilizzato adottato dalla maggior parte dei linguaggi come PHP, Java, Python.
Web Worker
API del browser che fornisce thread in background indipendenti dal thread principale; questo strumento la usa per eseguire regex nei Worker, in modo che anche se si verifica ReDoS l'UI non viene bloccata.
Quantificatore (Quantifier)
Sintassi che specifica quante volte l'elemento precedente si ripete: *(0 o più), +(1 o più), ?(0 o 1), {n}(esattamente n volte), {n,m}(n a m volte).

Tabella di riferimento rapido dei metacaratteri regex comuni

MetacarattereSignificatoEsempio esplicativo
.Qualsiasi carattere singolo (esclusa nuova riga; con flag s include nuove righe)a.c corrisponde a abc, aXc, non corrisponde a a\nc
\dCarattere cifra, equivalente a [0-9]\d{3} corrisponde a 123, 456
\wCarattere di parola, equivalente a [A-Za-z0-9_]\w+ corrisponde a hello_123
\sCarattere di spazio bianco (spazio/tabulatore/nuova riga ecc.)a\sb corrisponde a a b (spazio nel mezzo)
^Inizio stringa (con flag m è inizio riga)^Hello corrisponde a Hello a inizio riga
$Fine stringa (con flag m è fine riga)end$ corrisponde a end a fine riga
\bConfine di parola\bcat\b corrisponde alla parola indipendente cat, non a category
*L'elemento precedente si ripete 0 o più volte (ingordo)ab*c corrisponde a ac, abc, abbc
+L'elemento precedente si ripete 1 o più volteab+c corrisponde a abc, abbc, non a ac
?L'elemento precedente 0 o 1 volta (o usato per non ingordo/lookaround)colou?r corrisponde a color e colour
|Alternanza/o, corrisponde a sinistra o destracat|dog corrisponde a cat o dog
[...]Insieme di caratteri, corrisponde a uno qualsiasi di essi[aeiou] corrisponde a qualsiasi vocale

Modelli di riferimento rapido di espressioni regolari comuni

UsoEspressione regolareFlag consigliati
Indirizzo e-mail[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}g
Numero cellulare Cina continentale1[3-9]\d{9}g
Link URLhttps?:\/\/[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b[-a-zA-Z0-9()@:%_+.~#?&/=]*gi
Indirizzo IPv4\b(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\bg
Data YYYY-MM-DD\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])g
Numero carta d'identità (18 cifre)[1-9]\d{5}(?:18|19|20)\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\d|3[01])\d{3}[\dXx]g
UUID[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}gi

Code Examples

Corrispondenza e sostituzione regex in JavaScript

// Validare il formato e-mail
const emailRe = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
console.log(emailRe.test('user@example.com')); // true

// Estrarre gruppi nominati (analisi date)
const dateRe = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/g;
const text = '会议时间:2026-03-12,截止:2026-04-01';
const matches = [...text.matchAll(dateRe)];
for (const m of matches) {
  console.log(m.groups.year, m.groups.month, m.groups.day);
}

// Sostituzione: conversione formato data YYYY-MM-DD → MM/DD/YYYY
const reformatted = text.replace(dateRe, '$<month>/$<day>/$<year>');
console.log(reformatted);
// Orario riunione: 03/12/2026, scadenza: 04/01/2026

Uso del modulo re in Python

import re

# Cercare tutte le corrispondenze
text = '联系:alice@example.com,bob@test.org'
emails = re.findall(r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}', text)
print(emails)  # ['alice@example.com', 'bob@test.org']

# Estrazione con gruppi nominati (Python usa la sintassi ?P<name>)
date_pattern = r'(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})'
m = re.search(date_pattern, '发布于 2026-03-12')
if m:
    print(m.group('year'), m.group('month'), m.group('day'))

# Sostituzione: oscurare le 4 cifre centrali del numero di telefono
phone_re = r'(1[3-9]\d)\d{4}(\d{4})'
result = re.sub(phone_re, r'\1****\2', '手机号:13812345678')
print(result)  # Telefono: 138****5678

Uso di java.util.regex in Java

import java.util.regex.*;

class RegexDemo {
    public static void main(String[] args) {
        String text = "Error [2026-03-12 18:05:09] Connection failed";

        // Compilare la regex (in produzione, l'istanza Pattern deve essere memorizzata nella cache)
        Pattern p = Pattern.compile(
            "(?<level>INFO|WARN|ERROR)\\s+\\[(?<time>[^\\]]+)\\]\\s+(?<message>.+)"
        );
        Matcher m = p.matcher(text);

        if (m.find()) {
            System.out.println("级别: " + m.group("level"));
            System.out.println("时间: " + m.group("time"));
            System.out.println("消息: " + m.group("message"));
        }

        // Sostituire tutte le cifre
        String cleaned = "abc123def456".replaceAll("\\d+", "*");
        System.out.println(cleaned); // abc*def*
    }
}

Authoritative References