SILNIKI REGEX · PCRE ➔ GO RE2

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.

Advanced engine overrides and examples
Dialekt źródłowy:
Silnik docelowy:
Gotowe wzorce:
Źródłowe wyrażenie regularne
Ciąg testowy (Podgląd dopasowań na żywo)
Przetranspilowane wyrażenie regularne
Browser JavaScript preview of the source pattern:

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.