Konwerter dialektów Regex i matryca zgodności
Wklej regex lub fragment kodu i porównaj zgodność z PCRE, Go RE2, JavaScriptem, Pythonem i Rustem. Sprawdź bezpieczne przekształcenia, nieobsługiwaną składnię i wynik przed skopiowaniem.
Matryca zgodności dla 5 silników Regex
Sprawdzanie składni i wybranych bezpiecznych przekształceń w pięciu silnikach regex.
Diagnostyka składni i zalecenia silnika
Nie wykryto żadnych ostrzeżeń składniowych ani niezgodności.
Dlaczego Go RE2 i Rust unikają katastrofalnego backtrackingu
Tradycyjne silniki (PCRE, JS, Python) używają backtrackingu. W skrajnych przypadkach może on zablokować procesor w ataku ReDoS. Go RE2 i Rust korzystają z automatów skończonych (DFA/NFA), które gwarantują czas liniowy.
Zero katastrofalnego backtrackingu
RE2 dopasowuje obsługiwane wzorce w czasie proporcjonalnym do długości tekstu i unika katastrofalnego backtrackingu. Aplikacja nadal powinna ograniczać rozmiar danych i zużycie zasobów.
Przewidywalne skalowanie
Koszt dopasowania rośnie wraz z długością tekstu. Duże dane nadal wymagają więcej czasu i pamięci.
Bezpieczniejsze filtry użytkowników
RE2 i Rust regex unikają katastrofalnego backtrackingu, ale usługa nadal powinna ograniczać rozmiar wzorców, danych i zużycie zasobów.
Standaryzowane grupy nazwane
Używa standardowej składni Go (?P<name>...) zgodnej z Pythonem i Rustem.
Porównanie możliwości i złożoności silników Regex
| Cecha / Możliwość | PCRE / PHP | Go RE2 | JavaScript | Python re | Rust regex |
|---|---|---|---|---|---|
Lookahead (?=...) |
✓ Supported | ⛔ Forbidden (ReDoS risk) | ✓ Supported | ✓ Supported | ⛔ Forbidden |
Lookbehind (?<=...) |
✓ Supported | ⛔ Forbidden | ✓ Supported | ✓ Fixed-width | ⛔ Forbidden |
Backreferences \1 |
✓ Supported | ⛔ Forbidden (NP-complete) | ✓ Supported | ✓ Supported | ⛔ Forbidden |
| Named Groups | (?P<n>..) or (?<n>..) |
(?P<n>..) |
(?<n>..) |
(?P<n>..) |
(?P<n>..) |
Atomic Groups (?>...) |
✓ Native | ⛔ Manual rewrite | ⛔ Manual rewrite | ⛔ Manual rewrite | ⛔ Manual rewrite |
Possessive Quantifiers *+, ++ |
✓ Native | ⛔ Manual rewrite | ⛔ Manual rewrite | ⛔ Manual rewrite | ⛔ Manual rewrite |
Recursion (?R) |
✓ Native | ⛔ Unsupported | ⛔ Unsupported | ⛔ Unsupported | ⛔ Unsupported |
| Time Complexity | \(O(2^N)\) Exponential worst-case | \(O(N)\) Guaranteed Linear | \(O(2^N)\) Exponential worst-case | \(O(2^N)\) Exponential worst-case | \(O(N)\) Guaranteed Linear |
Najczęściej zadawane pytania
Dlaczego Go RE2 odrzuca lookahead (?=...) i lookbehind (?<=...)?
RE2 nie obsługuje asercji lookaround. Matryca oznacza takie wzorce jako niezgodne, aby można było jawnie przepisać otaczającą logikę dopasowania.
Dlaczego referencje wsteczne (backreferences) są zabronione w RE2?
Dopasowywanie wyrażeń z referencjami wstecznymi (takimi jak \1 lub \k<name>) jest problemem NP-zupełnym i w pesymistycznym przypadku wymaga wykładniczego czasu. RE2 ich nie obsługuje, aby utrzymać stałą wydajność liniową.
Jak konwerter obsługuje grupy atomowe (?>...) i kwantyfikatory zachłanne ++?
Transpiler zachowuje te konstrukcje bez zmian i oznacza nieobsługujące ich silniki jako niezgodne. Usunięcie atomowości lub zachłanności może zmienić dopasowania, dlatego trzeba przepisać i przetestować wzorzec ręcznie.
Czy przetwarzanie regex i tekstu jest bezpieczne?
Tak. Sprawdzanie składni, wybrane przekształcenia, matryca zgodności i podgląd dopasowań działają lokalnie w przeglądarce. Wzorce i tekst testowy nie trafiają na nasze serwery.