Test wyrażeń regularnych
Test wyrażeń regularnych
Test wyrażeń regularnych obsługuje dopasowanie w czasie rzeczywistym, grupy przechwytujące, grupy nazwane i podgląd zamian, co ułatwia walidację wzorców, ekstrakcję tekstu i masowe podmiany.
/
/g
Wyszukiwanie globalne
Bez rozróżn. wielkości liter
Wieloliniowy
Kropka obejmuje nowe linie
Tryb Unicode
Dopasowanie od pozycji
Tekst testowy
Tekst zamiany
Wyniki dopasowań
Wprowadź wzór, aby rozpocząć dopasowywanie
Podgląd wymiany
Szybki start
Typowe scenariusze
Wyodrębniaj ID, adresy e-mail, daty lub własne znaczniki z logów, źródła HTML albo surowego tekstu.
Sprawdź najpierw, czy wzorzec działa poprawnie, zanim użyjesz go w kodzie, walidacji formularza lub regule wyszukiwania.
Używaj grup przechwytujących i nazwanych do wsadowej zamiany struktury tekstu lub zawartości pól.
Wskazówki użycia
Ograniczenia i kompatybilność
Prywatność i bezpieczeństwo
Najczęstsze pytania
Wyrażenie regularne (regex) to język wzorców służący do opisywania struktur tekstowych. Potraktuj to jako „wyszukiwanie zaawansowane” — zamiast szukać stałego słowa, wyszukujesz wszystko, co pasuje do reguły.\n\nNa przykład \\d{4}-\\d{2}-\\d{2} dopasowuje wszystkie daty w formacie RRRR-MM-DD i [\\w.]+@[\\w.]+ pasuje do adresów e-mail. Regex jest szeroko stosowany do: wyszukiwania i ekstrakcji tekstu (znajdowanie kodów błędów w logach), sprawdzania poprawności formatu (sprawdzanie numerów telefonów) i zastępowania partii (konwersja formatów daty).\n\nPrawie każdy język programowania (JavaScript, Python, Java, Go itp.) i wiele narzędzi (VS Code, grep, sed) obsługuje wyrażenia regularne z przeważnie podobną składnią. To narzędzie wykorzystuje silnik JavaScript RegExp do szybkiego testowania i uczenia się online.
Wyrażenie regularne JavaScript domyślnie zwraca tylko pierwsze dopasowanie — jest to zachowanie specyfikacji języka, a nie ograniczenie narzędzia. Kliknij przycisk g na pasku flag, aby włączyć wyszukiwanie globalne i wyświetlić wszystkie dopasowania.\n\nZauważ interakcję między g i y: g skanuje cały tekst od początku do końca, podczas gdy y (przyklejony) wymaga, aby każde dopasowanie zaczynało się dokładnie w miejscu zakończenia poprzedniego — jeśli między dopasowaniami znajdują się znaki przerwy, y zatrzymuje się na pierwszej przerwie. Zwykle wystarczy włączyć g bez y.
Istnieją cztery najczęstsze przyczyny:\n\n1. Niedopasowane nawiasy: każdy (musi pasować), każdy [musi pasować ]. IDE mogą je automatycznie uzupełniać, ale to narzędzie wymaga ręcznego parowania.\n2. Źle umieszczone kwantyfikatory: kwantyfikatory (*, +, ?, {n}) muszą następować po elemencie wymiernym. Kombinacje takie jak *+ lub ?* są niedozwolone, chyba że pierwszym kwantyfikatorem jest ? dla leniwych modyfikacji (jak *?).\n3. Niekompletne ucieczki: samotny \\ na końcu jest nielegalny — musi uciekać od określonego znaku (np. \\d, \\n, \\\\).\n4. Właściwości Unicode wymagają flagi u: \\p{L}, \\p{Script=Han} i podobne właściwości Unicode powodują wyświetlenie błędów bez włączonej flagi u. Kliknij przycisk u, aby go włączyć.
Są to zastępcze tokeny referencyjne zdefiniowane przez JavaScript String.prototype.replace():\n\n- $1, $2, ..., $99: odwołują się do treści przechwyconej przez n-tą grupę przechwytującą (...)\n- $&: cały dopasowany tekst\n- $`: tekst przed match\n- $': tekst po dopasowaniu\n- ${name}: treść przechwycona przez nazwaną grupę (?<name>...)\n\nNa przykład wzór (\\w+)\\s(\\w+) pasujący do „witaj świecie” z zamianą $2-$1 generuje „witaj świecie”. Aby zamienić dosłowny znak $, użyj $$, aby go uniknąć.
Przekroczenia limitu czasu są prawie zawsze spowodowane „katastrofalnym cofaniem się”. Gdy silnik wyrażeń regularnych napotka zagnieżdżone kwantyfikatory (takie jak (a+)+b) lub nakładające się opcjonalne ścieżki, cofa się przez wykładniczą liczbę kombinacji, powodując eksplozję czasu dopasowania.\n\nTypowe niebezpieczne wzorce: (a+)+, (.*?)*, (.+)+$ itd. Rozwiązania:\n1. Zastępować . z precyzyjnymi klasami znaków, np. [^\\s]+ zamiast .+\n2. Unikaj zagnieżdżonych kwantyfikatorów — zmień (a+)+ na a+\n3. Zmniejsz nakładające się ścieżki opcjonalne — zmień (a|ab)+ na a+b?\n\nPo dostosowaniu wzorca kliknij przycisk „Ponów próbę” w obszarze wyników meczu. Narzędzie posiada 4-sekundową ochronę przed przekroczeniem limitu czasu i nie zawiesza przeglądarki.
Różne języki różnią się mechanizmami wyrażeń regularnych w trzech głównych obszarach:\n\n1. Obsługa składni jest różna: JavaScript nie obsługuje wzorców rekurencyjnych PCRE (?R), rozgałęzień warunkowych (?(cond)yes|no) ani grup atomowych (?>...). Brakuje ich również w module re Pythona, ale obsługuje je moduł regex. Java obsługuje grupy atomowe, ale nie rekurencję.\n2. Obsługa Unicode jest inna: Python 3 domyślnie przetwarza \\w, \\d jako Unicode; JavaScript domyślnie używa ASCII — musisz ręcznie włączyć flagę u. Oznacza to, że \\w nie będzie pasować do chińskich znaków, a \\b granice słów nie będą obowiązywać pomiędzy znakami CJK.\n3. Semantyka nowej linii jest inna: Python . nie pasuje domyślnie do \\n (tak samo jak JavaScript), natomiast Pattern.DOTALL języka Java zachowuje się tak samo jak flaga JavaScript.\n\nZalecenie: użyj tego narzędzia do szybkiej weryfikacji logiki, a następnie wykonaj ostateczne potwierdzenie w silniku języka docelowego.