DokumentyObrazyMediaNarzędzia PDF

Wyjaśnienie Regex Online

Tłumacz wzorce regex na zrozumiały język, bezpośrednio w przeglądarce.

//
1Start of string
2One of: A, -, Z, a, -, z, 0, -, 9, ., _, %, +, -, one or more times
3Literal "@"
4One of: A, -, Z, a, -, z, 0, -, 9, ., -, one or more times
5Escaped character: \.
6One of: A, -, Z, a, -, z, at least 2 times
7End of string
Processed in your browser

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.

Trzy kroki, żadnych komplikacji

1

Wklej wyrażenie regularne

Wpisz lub wklej wzorzec regex, który chcesz zrozumieć, z delimiterami lub bez.

2

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.

3

Testuj na prawdziwym tekście

Wpisz przykładowy tekst, aby w czasie rzeczywistym zobaczyć, które części pasują do wzorca.

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.