Wyjaśnienie Regex Online
Tłumacz wzorce regex na zrozumiały język, bezpośrednio w przeglądarce.
Do czego służy
Objaśniacz wyrażeń regularnych
Wszystkie warianty
Kompatybilny z wzorcami JavaScript, Python, PCRE, Java, Go i Ruby.
100% prywatne
Analiza wzorca odbywa się w Twojej przeglądarce. Twoje dane nigdy nie opuszczają Twojego urządzenia.
Jasne wyjaśnienie
Każdy token wzorca wyjaśniony prostym językiem, z przykładami dopasowań.
Natychmiast
Wyjaśnienie w czasie rzeczywistym podczas pisania. Bez rejestracji, bez czekania.
Jak to działa
Trzy kroki, żadnych komplikacji
Wklej wyrażenie regularne
Wpisz lub wklej wzorzec regex, który chcesz zrozumieć, z delimiterami lub bez.
Natychmiastowe wyjaśnienie
Narzędzie analizuje wzorzec i opisuje prostym językiem, co robi każda część: grupy, kwantyfikatory, klasy znaków i więcej.
Testuj na prawdziwym tekście
Wpisz przykładowy tekst, aby w czasie rzeczywistym zobaczyć, które części pasują do wzorca.
FAQ
Masz pytania?
Wyrażenie regularne to język wzorców do przeszukiwania i manipulowania tekstem. Pozwala precyzyjnie opisać wzorzec, na przykład: 'numer telefonu', 'adres e-mail' lub 'adres URL'. Silnik regex skanuje tekst w poszukiwaniu ciągów pasujących do tego wzorca. Są obsługiwane przez niemal wszystkie nowoczesne języki programowania.
E-mail: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$. URL: https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}. Telefon międzynarodowy: \+?[1-9]\d{1,14}. Tylko cyfry: ^\d+$. Kod pocztowy USA: ^\d{5}(-\d{4})?$.
Regex są niezwykle zwięzłe: każdy znak ma potencjalne specjalne znaczenie. Kropka (.) pasuje do dowolnego znaku. Gwiazdka (*) oznacza 'zero lub więcej razy'. Nawiasy kwadratowe ([]) definiują klasy znaków. Ta gęstość informacji oznacza, że 20-znakowe wyrażenie może reprezentować bardzo złożone reguły, ale sprawia też, że bez praktyki trudno je zrozumieć na pierwszy rzut oka.
PCRE (Perl Compatible Regular Expressions) to de facto standard dla PHP, Apache, nginx. JavaScript ma własny silnik z różnicami: starsze wersje nie obsługują lookbehind o zmiennej długości i ma flagę /u dla Unicode. Python używa modułu re ze składnią podobną do PCRE, ale z pewnymi różnicami (np. \A i \Z dla początku/końca ciągu). Go używa RE2, który nie obsługuje odwołań wstecznych ze względów wydajnościowych. Java używa java.util.regex z rozszerzoną składnią POSIX.
Znaki o specjalnym znaczeniu w regex to: . * + ? ^ $ { } [ ] | ( ) \. Aby użyć ich dosłownie, escapuj ukośnikiem odwrotnym: \. dla dosłownej kropki, \* dla dosłownej gwiazdki. W JavaScript wewnątrz ciągu potrzebne jest podwójne escapowanie: '\\.' bo ciąg już pochłania jeden ukośnik odwrotny. Wiele języków oferuje funkcje jak re.escape() w Python lub preg_quote() w PHP.
Historia wyrażeń regularnych (Ken Thompson, edytor ed 1968), teoria języków formalnych i regex w nowoczesnym programowaniu
Wyrażenia regularne wywodzą się z teorii języków formalnych opracowanej przez matematyka Stephena Kleene w latach 50., który zdefiniował 'zbiory regularne' i algebrę do ich opisywania. Ken Thompson jako pierwszy zaimplementował regex w oprogramowaniu, integrując je z edytorem tekstu Unix ed w 1968 (a później z grep, którego nazwa pochodzi od 'global regular expression print'). Jego implementacja używała kompilacji do kodu maszynowego dla wydajnego wyszukiwania — technika, która położyła fundamenty pod nowoczesne silniki regex.
Masowa popularyzacja regex nastąpiła dzięki Perlowi w latach 80. i 90. Larry Wall zintegrował regex natywnie w składnię języka, a PCRE (Perl Compatible Regular Expressions) stały się de facto standardem. POSIX sformalizował dwa poziomy: BRE (Basic Regular Expressions) i ERE (Extended Regular Expressions) w standardzie z 1992. Dziś niemal wszystkie języki programowania zawierają obsługę regex: Python (moduł re), JavaScript (RegExp), Java (java.util.regex), Go (regexp/RE2), Ruby, PHP (preg_*), .NET i wiele innych.
Regex to narzędzie obosieczne: niezwykle potężne, ale też źródło podatności. ReDoS (Regular Expression Denial of Service) to typ ataku, gdzie źle napisany wzorzec regex może powodować wykładniczy czas wykonania przy określonych złośliwych danych wejściowych. Silnik RE2 Google (używany w Go) został specjalnie zaprojektowany, aby gwarantować liniowy czas wykonania, eliminując możliwość ReDoS kosztem braku obsługi odwołań wstecznych. OWASP umieszcza ReDoS na liście zagrożeń bezpieczeństwa w aplikacjach webowych.