← Wszystkie narzędzia

Tester wyrażeń regularnych

Buduj, testuj i debuguj wyrażenia regularne na żywo na własnym tekście w przeglądarce. Poznaj klasy znaków, kwantyfikatory, kotwice, grupy i flagi.

Tester wyrażeń regularnych: buduj i debuguj wzorce na własnym tekście

Wyrażenie regularne to miniaturowy język opisujący kształt tekstu. Zamiast pytać „czy to dokładne słowo jest tutaj?", regex pozwala zapytać „czy jest ciąg wyglądający tak?". To właśnie czyni go potężnym do wyszukiwania, walidowania, wyciągania i zastępowania tekstu w edytorach kodu, plikach logów, polach formularzy i skryptach. To też sprawia, że łatwo popełnić błąd, bo wzorzec, który w głowie wygląda poprawnie, może po cichu dopasowywać zbyt wiele, zbyt mało lub nic.

Dlatego interaktywne testowanie bije zgadywanie. Gdy wpisujesz wzorzec i widzisz, jak dopasowania rozświetlają się w rzeczywistym tekście próbki, otrzymujesz natychmiastową informację zwrotną: widzisz, co zostało złapane, co wyśliznęło się i która grupa przechwytująca złapała który fragment. Nasz Tester wyrażeń regularnych działa w całości w przeglądarce. Wzorzec i tekst próbny nigdy nie opuszczają strony, więc możesz wklejać wiersze logów, adresy e-mail lub dane produkcyjne bez wysyłania czegokolwiek na serwer.

Świecący cyjanowy filtr wyłapujący konkretne złote tokeny z płynącego strumienia danych na ciemnoniebieskim tle
Regex działa jak filtr, wybierając tylko te tokeny, które pasują do wzorca.

Elementy składowe, które warto znać

Większość codziennych wzorców jest składana z małego zestawu elementów. Naucz się ich, a będziesz mógł odczytać większość wyrażeń regularnych napotkanych w terenie.

Klasy znaków opisują zestaw dozwolonych znaków. [aeiou] pasuje do dowolnej samogłoski, [0-9] pasuje do jednej cyfry, a [a-zA-Z] pasuje do jednej litery. Daszek wewnątrz nawiasów neguje zestaw, więc [^0-9] oznacza „dowolny znak niebędący cyfrą". Skróty oszczędzają pisanie: \d to cyfra, \w to znak słowny (litery, cyfry, podkreślenie), \s to biały znak, a kropka . pasuje do niemal dowolnego pojedynczego znaku.

Kwantyfikatory określają, ile razy poprzedni element może się powtarzać. * oznacza zero lub więcej, + oznacza jeden lub więcej, a ? oznacza zero lub jeden (opcjonalny). Dla dokładnych liczebników {3} oznacza dokładnie trzy, a {2,4} oznacza od dwóch do czterech. Tak więc \d{4} pasuje do czterocyfrowego roku, a colou?r pasuje do obu pisowni.

Kotwice przypinają wzorzec do pozycji, a nie do znaku. ^ pasuje do początku tekstu, $ pasuje do końca, a \b oznacza granicę słowa. Wzorzec ^Error pasuje tylko do wierszy zaczynających się od „Error", co jest dokładnie tym, czego chcesz podczas skanowania logów.

Grupy owijają część wzorca w nawiasy, zarówno po to, by zastosować kwantyfikator do kilku znaków naraz, jak i po to, by przechwycić dopasowany tekst do dalszego użycia. W (\d{4})-(\d{2})-(\d{2}) każda grupa przechwytuje składową daty, którą możesz wyciągnąć później. Alternacja za pomocą pionowej kreski działa jak „lub": cat|dog|fish pasuje do dowolnego z trzech słów.

Wzorce, po które rzeczywiście sięgasz

Kilka powtarzających się zadań obejmuje większość prawdziwej pracy. By złapać coś podobnego do adresu e-mail, [\w.+-]+@[\w-]+\.[\w.-]+ to pragmatyczny punkt startowy; pełna walidacja adresów e-mail zgodna z formalną specyfikacją jest słynnie zawiła, a luźny wzorzec jest zazwyczaj właściwym wyborem do podświetlania kandydatów, a nie odrzucania użytkowników.

Dla liczb \d+ chwyta ciągi cyfr, a -?\d+(\.\d+)? pasuje do opcjonalnych znaków ujemnych i dziesiętnych. By przyciąć wiodące i końcowe białe znaki, dopasuj ^\s+|\s+$ i zastąp niczym. By znaleźć zduplikowane słowa, wzorzec z odwołaniem wstecznym \b(\w+)\s+\1\b pasuje do słowa po którym następuje ono samo, gdzie \1 odwołuje się z powrotem do pierwszej grupy przechwytującej.

Wybrane słowa świecące złotem i podświetlone w płynącej rzece cyjanowych cząstek tekstowych na ciemnym tle
Podświetlanie na żywo pokazuje dokładnie, które fragmenty tekstu pasują do wzorca.

Flagi zmieniają sposób dopasowania

Flagi to przełączniki modyfikujące cały wzorzec. Flaga global (g) znajduje każde dopasowanie zamiast zatrzymywać się na pierwszym, co jest potrzebne przy podświetlaniu wszystkich wystąpień. Flaga case-insensitive (i) sprawia, że error pasuje do „Error" i „ERROR" jednakowo. Flaga multiline (m) zmienia działanie ^ i $ tak, by pasowały na początku i końcu każdego wiersza, a nie tylko całego tekstu, co jest niezbędne przy pracy z logami wiersz po wierszu. Inne przydatne flagi to s (dotall, pozwalający kropce dopasować znaki nowej linii) i u do pełnej obsługi Unicode.

Warianty różnią się nieco w zależności od języka

Regex to rodzina dialektów, a nie jeden stały standard. JavaScript, Python, PCRE (PHP), Java, .NET, Go i Rust zgadzają się co do podstawowej składni opisanej powyżej, ale rozbiegają na obrzeżach: obsługa lookahead/lookbehind, składnia nazwanych grup ((?<name>...) a (?P<name>...)), sekwencje ucieczki właściwości Unicode i dostępne flagi — to wszystko się różni. Wzorzec działający w jednym silniku może wymagać drobnej poprawki w innym, więc opłaca się testować z tym wariantem, który faktycznie używasz w produkcji. Gdy wzorzec jest już dopracowany, nasze inne narzędzia deweloperskie i narzędzia tekstowe mogą pomóc z otaczającą pracą czyszczenia, kodowania i transformowania właśnie dopasowanych danych.

Najczęściej zadawane pytania

Czy mój tekst jest wysyłany na serwer?

Nie. Tester wyrażeń regularnych działa w całości w przeglądarce. Wzorzec i tekst próbny pozostają na Twoim urządzeniu i nigdy nie są przesyłane, więc można bezpiecznie wklejać poufne dane.

Którego wariantu wyrażeń regularnych używa to narzędzie?

Używa silnika wyrażeń regularnych JavaScript wbudowanego w przeglądarkę. Podstawowa składnia odpowiada tej, którą znasz z większości języków, choć niektóre zaawansowane funkcje różnią się nieco od PCRE, Pythona czy .NET.

Jaka jest różnica między dopasowaniem zachłannym a leniwym?

Domyślnie kwantyfikatory są zachłanne i pobierają jak najwięcej tekstu. Dodanie znaku zapytania sprawia, że są leniwe, więc pobierają jak najmniej. Na przykład wzorzec kropka gwiazdka jest zachłanny, a kropka gwiazdka znak zapytania jest leniwy.

Jak dopasować dosłowny znak specjalny?

Poprzedź go ukośnikiem wstecznym. By dopasować dosłowną kropkę, napisz ukośnik wsteczny i kropkę. To samo dotyczy innych metaznaków, takich jak nawiasy, nawiasy kwadratowe, znak plus i znak zapytania.

Dlaczego mój wzorzec nic nie dopasowuje?

Częste przyczyny to brakująca flaga global, kotwice przypinające dopasowanie do złej pozycji, nieescapowany znak specjalny lub zachłanne kwantyfikatory przekraczające oczekiwaną granicę. Testuj element po elemencie, by znaleźć winowajcę.

Czy mogę przechwycić część dopasowania?

Tak. Owiń część wzorca w nawiasy, by stworzyć grupę przechwytującą. Każda grupa jest raportowana osobno, co pozwala wyciągać pola, takie jak rok, miesiąc i dzień z daty.