Regex Tester - Tester Wyrażeń Regularnych Online

    Tester wyrażeń regularnych online: zaznacza dopasowania w tekście, pokazuje linię, kolumnę i grupy, robi podmianę z $1 i ostrzega przed wzorcami grożącymi zawieszeniem.

    Parametry

    Wprowadź dane do obliczeń

    Używany, gdy pole wzorca jest puste

    Bez ukośników albo jako /wzorzec/flagi

    Wszystkie dopasowania są szukane zawsze (g)

    0 / 20000 znaków

    Do 20 000 znaków

    Domyślnie bez podmiany

    Regex tester: wzorzec, tekst i od razu widać, co pasuje

    Wyrażenie regularne (regex) to wzorzec, który opisuje kawałek tekstu: „dwie cyfry, myślnik, trzy cyfry” to kod pocztowy ^\d{2}-\d{3}$. Tester zaznacza w tekście każde dopasowanie, podaje jego linię, kolumnę i zawartość grup, a po wpisaniu zamiennika pokazuje tekst po podmianie. Działa na silniku JavaScript V8, tym samym co w Chrome i Node.js, a pozostałe przeglądarki stosują ten sam standard ECMAScript, więc wzorzec sprawdzony tutaj zachowa się tak samo w kodzie strony.

    Szybki start: wybierz gotowy wzorzec (np. „Kod pocztowy”), wklej kilka linii tekstu i uruchom. Dopasowania podświetlą się na żółto i niebiesko na przemian, a pod spodem pojawi się ich lista. Własny wzorzec możesz wpisać sam albo wkleić w zapisie /wzorzec/flagi, np. /abc/i.
    1. Wzorzec - własny albo gotowy z listy. Wpisany ma pierwszeństwo przed gotowym.
    2. Flagi - i (bez rozróżniania wielkości liter), m (^ i $ dla każdej linii), s (kropka łapie też koniec linii), u (pełny Unicode).
    3. Tekst - do 20 000 znaków, może mieć wiele linii.
    4. Podmiana - wszystkie dopasowania albo tylko pierwsze, zamiennik może używać $1, $<nazwa> i $&.

    Osiem sytuacji, w których regex oszczędza ręcznej roboty

    Przykład 1: które adresy e-mail z listy mają poprawną budowę

    Sytuacja: gotowy wzorzec e-mail, cztery linie: jan.kowalski@firma.pl, zly@adres, ANNA+test@poczta.example.com, @brak.pl.

    Wynik: 2 dopasowania, w liniach 1 i 3. Adres bez domeny najwyższego poziomu i adres bez nazwy użytkownika odpadają.

    To wzorzec uproszczony, wystarczający do porządkowania listy. Pełna składnia adresu z RFC 5322 dopuszcza więcej, a ostatecznym testem jest i tak wysłanie wiadomości.

    Przykład 2: kody pocztowe w kolumnie z arkusza

    Sytuacja: wzorzec ^\d{2}-\d{3}$ z flagą m, linie 00-950, 44-100, 4410, 44-1000.

    Wynik: 2 dopasowania. 44-1000 nie przechodzi dzięki znakowi $, który wymaga końca linii po trzeciej cyfrze.

    Bez ^ i $ wzorzec znalazłby kod także w środku dłuższego ciągu.

    Przykład 3: numery telefonów zapisane na kilka sposobów

    Sytuacja: gotowy wzorzec telefonu, pięć linii: +48 600 700 800, 600-700-800, 600700800, 60070080, +48600700800.

    Wynik: 4 dopasowania. Odpada tylko linia 4, bo ma 8 cyfr zamiast 9.

    Wzorzec sprawdza format, nie to, czy numer istnieje.

    Przykład 4: zamiana 07:30 na 07.30 grupami nazwanymi

    Sytuacja: wzorzec (?<godz>\d{2}):(?<min>\d{2}), tekst start 07:30, koniec 16:45, podmiana wszystkich na $<godz>.$<min>.

    Wynik: 2 dopasowania w kolumnach 7 i 21, w tabeli grupy godz: 07, min: 30 i godz: 16, min: 45. Po podmianie: start 07.30, koniec 16.45.

    Nazwa w zamienniku jest czytelniejsza niż $1 i $2, zwłaszcza gdy grup jest kilka.

    Przykład 5: \w a polskie litery

    Sytuacja: wzorzec \w+, tekst Żółw i łódź.

    Wynik: 3 dopasowania, ale to w, i i d. W JavaScript \w oznacza tylko A-Z, a-z, cyfry i podkreślnik, także z flagą u. Wzorzec [\p{L}\d_]+ z flagą u daje już Żółw, i i łódź.

    Bez flagi u zadziała też jawna lista: [a-ząćęłńóśźż]+ z flagą i.

    Przykład 6: kwoty w złotych i pułapka z przecinkiem

    Sytuacja: wzorzec \d+(?:,\d{2})? zł, tekst Kawa 12,50 zł, ciastko 9 zł, rabat 1,5 zł.

    Wynik: 3 dopasowania: 12,50 zł, 9 zł i 5 zł. Kwota „1,5” ma jedną cyfrę po przecinku, więc część dziesiętna nie pasuje i silnik bierze samo „5”. Poprawka: \d+(?:,\d{1,2})? zł łapie 1,5 zł w całości.

    Podświetlenie w podglądzie od razu pokazuje, że dopasowanie zaczyna się w złym miejscu.

    Przykład 7: czyszczenie tekstu ze znaczników i podwójnych spacji

    Sytuacja: gotowy wzorzec „znaczniki HTML” na <p>Cena: <b>12 zł</b></p> z pustym zamiennikiem, potem „dwie i więcej spacji” na Cena netto: 120 zł z zamiennikiem w postaci jednej spacji.

    Wynik: 4 znaczniki usunięte, zostaje Cena: 12 zł. W drugim tekście 2 dopasowania i wynik Cena netto: 120 zł.

    Do jednorazowego czyszczenia regex wystarcza. Do przetwarzania całych stron HTML lepszy jest parser.

    Przykład 8: wzorzec, który zawiesza program (ReDoS)

    Sytuacja: wzorzec ^(a+)+$, tekst z 30 literami „a” i wykrzyknikiem na końcu.

    Wynik: odmowa z opisem problemu. Przed pełnym przeszukaniem tester mierzy czas na coraz dłuższych początkach i końcach każdej linii, a tutaj rośnie on wykładniczo, bo silnik próbuje wszystkich sposobów podziału liter między dwa plusy.

    Ten sam wzorzec w kodzie serwera, który sprawdza dane od użytkowników, to gotowy sposób na jego zablokowanie. Wystarczy ^a+$.

    Ściąga ze składni wyrażeń regularnych

    Najczęściej używane elementy w zapisie JavaScript. Kolumna „Uwaga” zbiera różnice, przez które wzorzec skopiowany z innego języka przestaje działać; wszystkie sprawdzone na silnikach JavaScript (Node.js) i Python (moduł re).

    Zapis Znaczenie Uwaga
    .dowolny znak oprócz końca liniiz flagą s także koniec linii
    \d \w \scyfra, znak słowa, biały znak\w nie obejmuje ą, ć, ę ...
    [abc] [^abc]jeden ze znaków, żaden ze znakówzakres [a-z] bez polskich liter
    ^ $początek i koniec tekstuz flagą m: każdej linii
    \bgranica słowa\bkot\b nie znajdzie „kotek”
    * + ?0 lub więcej, 1 lub więcej, 0 lub 1z ? na końcu (+?) najkrócej
    {2} {1,3}dokładnie 2, od 1 do 3 razy{3,1} to błąd składni
    (…) (?:…)grupa przechwytująca i bez przechwytywaniaw zamienniku $1, $2 ...
    (?<nazwa>…)grupa nazwanaPython: (?P<nazwa>…)
    (?=…) (?!…)dalej jest / dalej nie manie wchodzi do dopasowania
    (?<=…) (?<!…)przed jest / przed nie maPython: tylko stała długość
    \p{L}dowolna litera, także polskatylko z flagą u; moduł re w Pythonie go nie zna
    a|ba albo b(a|a)* grozi ReDoS

    FAQ - wyrażenia regularne bez zgadywania

    Regex - co to jest w jednym zdaniu?
    Krótki zapis reguły w rodzaju „trzy cyfry, myślnik, dwie cyfry”, którym program przeszukuje albo podmienia tekst. Obsługują go edytory kodu, arkusze kalkulacyjne, bazy danych i prawie każdy język programowania.
    Czemu tutaj działa, a w Pythonie wyskakuje błąd?
    Najczęstsze trzy powody: grupa nazwana zapisana jako (?<nazwa>…) zamiast (?P<nazwa>…), lookbehind o zmiennej długości, np. (?<=ab+), oraz \p{L}. Python w module re przyjmuje tylko lookbehind stałej długości i nie zna \p{…}.
    Jak znaleźć kropkę, nawias albo znak zapytania dosłownie?
    Poprzedź go ukośnikiem wstecznym: \., \(, \?. Znaki ze specjalnym znaczeniem to . ^ $ * + ? ( ) [ ] { } | \ oraz / w zapisie /…/. Wewnątrz nawiasu kwadratowego większość z nich traci znaczenie, więc [.] to też dosłowna kropka.
    Dlaczego mam dopasowania o długości zero?
    Wzorzec w rodzaju a* albo \d* pasuje także do pustego ciągu, więc znajduje „nic” w każdym miejscu tekstu. W podglądzie widać to jako czerwone kreski. Zwykle chodzi o + zamiast *.
    Co to jest ReDoS i czy mój wzorzec jest bezpieczny?
    To sytuacja, w której wzorzec z zagnieżdżonymi kwantyfikatorami albo nakładającymi się alternatywami sprawdza tekst wykładniczo długo. Tester mierzy czas na krótkich fragmentach każdej linii (do 64 znaków) i odmawia, gdy czas rośnie zbyt szybko. Problem ukryty w środku bardzo długiej linii może przejść ten pomiar, wtedy obliczenie przerwie limit czasu serwera.
    Czy mogę testować na prawdziwych danych klientów?
    Lepiej nie. Dopasowanie liczy serwer LiczGrupa.pl, a dane wejściowe zapisują się w dzienniku obliczeń. Do testu wystarczą przykłady o tej samej budowie, np. z generatora danych testowych.

    Powiązane narzędzia

    Generator Cron

    Wyrażenie crontab z listy albo rozbiór gotowego, po polsku i z najbliższymi terminami, także w noc zmiany czasu - Zobacz generator

    JWT Decoder

    Nagłówek i payload tokenu JWT, daty wygaśnięcia w czasie polskim i weryfikacja podpisu HS256 sekretem - Zobacz generator

    Formatowanie JSON

    Walidator JSON z numerem linii i kolumny błędu - Zobacz generator

    Generator Danych Testowych

    Fikcyjne PESEL-e, adresy e-mail i telefony do sprawdzania wzorców - Zobacz generator

    Konwerter JSON na XML

    Zamiana JSON na XML i z powrotem z kontrolą znaków - Zobacz generator

    Generator Slugów URL

    Tytuł na przyjazny adres bez polskich znaków i spacji - Zobacz generator

    Kodowanie Base64

    Tekst na Base64 i base64url do tokenów - Zobacz generator

    Generator zweryfikowany przez zespół LiczGrupa.pl

    Treść, wzory i wyniki zostały sprawdzone pod kątem poprawności i aktualności przez nasz zespół specjalistów.

    Krystian Szyszka

    Sprawdził: Krystian Szyszka