Tester wyrazen regularnych
Wyrazenia regularne (regex) to wzorce do dopasowywania tekstu. To narzedzie analizuje skladnie regex, objasnia komponenty wzorca i udostepnia obszar testowy do wyprobowywania dopasowan na przykladowym tekscie. Obsluguje formaty regex JavaScript, PCRE i Python.
Specyfikacje
Typowe zastosowania
- Debugowanie dlaczego regex nie dopasowuje oczekiwanego tekstu
- Nauka skladni regex przez ogladanie objasien
- Testowanie wzorcow przed dodaniem do kodu
- Walidacja wzorcow wejsciowych dla pol formularzy
- Wyodrebnianie danych ze strukturyzowanego tekstu (logi, CSV, HTML)
Funkcje
- Wykrywanie formatu regex (JavaScript /pattern/flags, PCRE #pattern#, Python r"pattern")
- Wyjasnanie komponentow wzorca prostym jezykiem
- Testowanie na przykladowym tekscie z podswietlaniem dopasowan
- Tryb pojedynczego dopasowania lub znajdowania wszystkich dopasowan
- Wyswietlanie grup przechwytywania i ich zawartosci
- Wyswietlanie nazwanych grup przechwytywania
- Pokazywanie pozycji i indeksow dopasowan
- Wyswietlanie czasu wykonania regex
- Znaczniki cech wzorca (kotwice, kwantyfikatory itp.)
- Ostrzezenia dotyczace wzorca
- Biblioteka popularnych wzorcow (email, URL, telefon itp.)
Przyklady
Wzorzec email
Wypróbuj →Regex do dopasowywania adresow email.
/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/iWskazowki
- Uzywaj testerow online do debugowania zlozonych wzorcow przed wdrozeniem na produkcje.
- Escapuj znaki specjalne (. ^ $ * + ? { } [ ] \ | ( )) za pomoca odwrotnego ukosnika.
- Nazwane grupy przechwytywania (?<name>...) czynia dopasowania bardziej czytelnymi.
- Flaga g znajduje wszystkie dopasowania; bez niej zwracane jest tylko pierwsze dopasowanie.
- Uwazaj na zachlanne kwantyfikatory (* +); uzywaj leniwych (*? +?) gdy to wlasciwe.
Zrozumienie Tester wyrazen regularnych
Wyrazenia regularne (regex) to jezyk dopasowywania wzorcow uzywany w praktycznie kazdym jezyku programowania, edytorze tekstu i narzedziu wiersza polecen. Regex definiuje wzorzec wyszukiwania przy uzyciu kombinacji znakow literalnych i metaznakow dopasowujacych klasy lancuchow. Sa niezbedne do walidacji danych wejsciowych, ekstrakcji tekstu, operacji wyszukiwania i zamiany oraz analizy logow.
Podstawowa skladnia obejmuje klasy znakow ([a-z], \\d, \\w, \\s), kwantyfikatory (*, +, ?, {n,m}), kotwice (^, $, \\b), alternacje (|) i grupowanie za pomoca nawiasow. Przechwycone grupy wyodrebniaja dopasowane podlancuchy i umozliwiaja odwolania wsteczne. Asercje wyprzedzajace (?=...) i wsteczne (?<=...) dopasowuja pozycje bez konsumowania znakow, umozliwiajac zlozone twierdzenia o otaczajacym kontekscie.
JavaScript regex ma wlasny dialekt ze specyficznymi flagami: g (globalny), i (bez rozrozniania wielkosci liter), m (wieloliniowy), s (dotAll), u (Unicode) i y (lepki). Flaga u jest coraz wazniejsza dla prawidlowej obslugi tekstu Unicode, poniewaz bez niej wzorce moga nie dopasowywac prawidlowo znakow wielobajtowych. Nazwane grupy przechwytywania (?<name>...) poprawiaja czytelnosc w porownaniu z grupami numerowanymi.
Typowe zadania regex obejmuja walidacje adresow email, parsowanie URL, wyodrebnianie danych ze strukturyzowanego tekstu (pliki logow, CSV) i zastepowanie wzorcow podczas refaktoryzacji kodu. Jednakze regex ma ograniczenia — nie moze parsowac zagniezdzonych struktur jak HTML czy JSON (nalezy uzyc wlasciwego parsera), a nadmiernie zlozone wzorce staja sie nieczytelne i trudne w utrzymaniu. Zart "teraz masz dwa problemy" odzwierciedla realne wyzwania zwiazane z utrzymaniem zlozonych wyrazen regularnych.
HTML jest jezykiem bezkontekstowym z zagniezdzonymi strukturami, ktorych wyrazenia regularne fundamentalnie nie moga obslugiwac. Regex nie moze prawidlowo dopasowac otwierajacych i zamykajacych tagow z dowolna glebokoscia zagniezdzenia. Proste przypadki moga wydawac sie dzialac, ale zawodza w przypadkach brzegowych obejmujacych zagniezdzone tagi, atrybuty zawierajace > lub komentarze. Do przetwarzania HTML nalezy uzywac parsera DOM, takiego jak DOMParser w przegladarce, cheerio dla Node.js lub BeautifulSoup dla Pythona.
Roznica miedzy .* (zachlanny) a .*? (leniwy) kwantyfikatorem jest istotna dla zachowania dopasowywania. Zachlanny .* dopasowuje jak najwiecej znakow, a nastepnie cofaja sie w razie potrzeby. Leniwy .*? dopasowuje jak najmniej znakow. W lancuchu "<b>raz</b><b>dwa</b>" zachlanny wzorzec <b>.*</b> dopasowuje caly lancuch, podczas gdy leniwy wzorzec <b>.*?</b> dopasowuje tylko pierwszy "<b>raz</b>". Wybor zlego trybu jest jedna z najczestszych przyczyn nieoczekiwanego zachowania regex.
W JavaScript flaga u (/pattern/u) wlacza dopasowywanie z uwzglednieniem Unicode. Bez niej metaznak . nie dopasowuje znakow spoza podstawowej plszczyzny wielojezycznej (takich jak emoji), a \\w dopasowuje tylko znaki slowne ASCII. Flaga u sprawia, ze kwantyfikatory i klasy znakow prawidlowo obsluguja pary surogatow i wlacza sekwencje ucieczki wlasciwosci Unicode, takie jak \\p{Letter}. Asercje wyprzedzajace (?=...) i wsteczne (?<=...) to asercje zerowej szerokosci, ktore sprawdzaja wzorce na pozycji bez wlaczania ich do dopasowania. Pozytywna asercja wyprzedzajaca (?=...) stwierdza, co musi nastapic, a negatywna (?!...) — co nie moze nastapic. Na przyklad \\d+(?= dollars) dopasowuje liczby, po ktorych wystepuje " dollars", ale przechwytuje tylko sama liczbe. Asercje wsteczne dzialaja w ten sam sposob, ale sprawdzaja poprzedzajacy tekst.