Skip to main content
CheckTown
Dev Tools

Regex Explainer: zrozumienie wyrazen regularnych

Opublikowano 6 min czytania
W tym artykule

Czym sa wyrazenia regularne?

Wyrazenia regularne (regex) to ciagi znakow definiujace wzorce wyszukiwania. Sa uzywane w praktycznie kazdym jezyku programowania i edytorze tekstu do znajdowania, dopasowywania i manipulowania ciagami znakow na podstawie regul, a nie dokladnego tekstu. Pojedynczy wzorzec regex moze pasowac do tysiecy roznych ciagow znakow o wspolnej strukturze.

Skladnia regex moze wydawac sie kryptyczna na pierwszy rzut oka, ale podaza za logiczna gramatyka: znaki literalne odpowiadaja same sobie, specjalne metaznaki jak . (dowolny znak), * (zero lub wiecej) i [] (klasy znakow) definiuja elastyczne reguly dopasowywania. Nauka czytania wzorcow regex odblokowuje potezne mozliwosci przetwarzania tekstu, ktore w przeciwnym razie wymagalyby dziesiatek linii kodu.

Jak dzialaja wzorce regex

Silnik regex przetwarza wzorzec znak po znaku wzgledem tekstu wejsciowego, sledzac mozliwe dopasowania i cofajac sie, gdy sciezka zawodzi. Zrozumienie kilku podstawowych elementow czyni kazdy wzorzec czytelnym.

  • Klasy znakow i kwantyfikatory -- [a-z] dopasowuje dowolna mala litere, \d dopasowuje dowolna cyfre, + oznacza jeden lub wiecej, a {2,4} dopasowuje miedzy 2 a 4 powtorzenia
  • Grupy i alternacja -- nawiasy () tworza grupy przechwytywania do wyodrebniania poddopasowan, podczas gdy operator pipe | zapewnia logike LUB miedzy alternatywami
  • Kotwice i lookaheady -- ^ i $ zakotwiczaja dopasowania na poczatku i koncu linii, podczas gdy lookaheady (?=...) i lookbehindy (?<=...) sprawdzaja warunki bez konsumowania znakow

Wypróbuj za darmo — bez rejestracji

Wyjasnij wzorzec regex →

Kiedy uzywac regex

Wyrazenia regularne sa standardowym narzedziem do przetwarzania tekstu opartego na wzorcach w tworzeniu oprogramowania.

  • Walidacja formularzy -- sprawdz, czy dane wprowadzone przez uzytkownika odpowiadaja oczekiwanym formatom, takim jak adresy e-mail, numery telefonow czy kody pocztowe, bez pisania wlasnej logiki parsowania
  • Analiza logow -- wyodrebniaj znaczniki czasu, kody bledow i adresy IP z logow serwera za pomoca grup przechwytywania w celu strukturyzacji nieustrukturyzowanych danych tekstowych
  • Znajdz i zamien -- wykonuj masowe transformacje tekstu w edytorach kodu lub skryptach budowania, takie jak zmiana nazw zmiennych czy przeformatowanie ciagow dat w calym projekcie

Czesto zadawane pytania

Jaka jest roznica miedzy regex a wzorcami glob?

Wzorce glob (jak *.txt) to prostsze wzorce z symbolami wieloznacznymi uzywane glownie do dopasowywania nazw plikow w powlokach. Regex jest znacznie bardziej ekspresywny: obsluguje alternacje, kwantyfikatory, lookaheady, odwolania wsteczne i klasy znakow. Uzywaj glob dla sciezek plikow, a regex do dopasowywania zawartosci tekstowej.

Czym jest dopasowanie zachlanne vs leniwe?

Kwantyfikatory zachlanne (*, +, {n,m}) dopasowuja jak najwiecej tekstu, podczas gdy kwantyfikatory leniwe (*?, +?, {n,m}?) dopasowuja jak najmniej. Na przyklad, przy wejsciu <b>pogrubiony</b> zachlanny wzorzec <.*> dopasowuje caly ciag, podczas gdy <.*?> dopasowuje tylko <b>. Uzywaj kwantyfikatorow leniwych, gdy potrzebujesz najkrotszego mozliwego dopasowania.

Czy regex moze powodowac problemy z wydajnoscia?

Tak. Niektore wzorce z zagniezdonymi kwantyfikatorami moga powodowac katastrofalne cofanie, gdzie silnik bada wykladnicza liczbe sciezek. Wzorce takie jak (a+)+ na dlugim ciagu a moga zamrozic program. Unikaj zagniezdzonych kwantyfikatorow na nakladajacych sie zbiorach znakow, uzywaj grup atomowych, gdy to mozliwe, i testuj wzorce na najgorszych przypadkach wejsciowych.

Powiązane narzędzia