SILNIKI REGEX · PCRE ➔ GO RE2

Transpiler dialektów Regex i matryca zgodności

Konwertuj złożone wyrażenia regularne między PCRE, Go RE2, JavaScriptem, Pythonem a Rustem. Wykrywaj błędy asercji lookaround, przekształcaj grupy atomowe i kwantyfikatory zachłanne oraz weryfikuj odporność na ReDoS.

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
Podgląd dopasowań na żywo:

Matryca zgodności dla 5 silników Regex

Ocena wsparcia składni, złożoności obliczeniowej oraz automatycznych przekształceń AST dla wszystkich wiodących silników.

Diagnostyka składni i zalecenia silnika

Nie wykryto żadnych ostrzeżeń składniowych ani niezgodności.

Dlaczego Go RE2 i Rust całkowicie eliminują ReDoS

Tradycyjne silniki (PCRE, JS, Python) wykorzystują rekurencyjne nawracanie (backtracking), co czyni je podatnymi na ataki blokujące procesor (ReDoS). Go RE2 i Rust opierają się na automatach skończonych (DFA/NFA) z gwarancją wykonania w czasie liniowym.

🛡️

Zero katastrofalnego backtrackingu

RE2 gwarantuje czas wykonania wprost proporcjonalny do długości tekstu O(N), całkowicie eliminując ryzyko zawieszenia procesora.

Przewidywalne opóźnienia mikrosekundowe

Bez względu na to, czy tekst ma 10 bajtów czy 10 megabajtów, dopasowanie następuje w stałym tempie bez niekontrolowanego rozrostu stosu pamięci.

🔒

Bezpieczne filtry od użytkowników

Możesz bezpiecznie przyjmować dowolne filtry regex od użytkowników w Kubernetes, Envoy i mikroserwisach chmurowych bez obaw o awarię.

📦

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 (?:...) non-capturing (?:...) (?:...) (?:...)
Possessive Quantifiers *+, ++ ✓ Native *, + greedy *, + *, + *, +
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 (?<=...)?

Asercje lookaround wymagają nawracania w celu sprawdzenia warunków przed lub za wskaźnikiem bez konsumpcji znaków. Aby matematycznie zagwarantować liniowy czas O(N) i wyeliminować ataki ReDoS, RE2 zabrania asercji wyprzedzających i wstecznych.

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 transpiler obsługuje grupy atomowe (?>...) i kwantyfikatory zachłanne ++?

Grupy atomowe i kwantyfikatory zaborcze służą w PCRE do ograniczania backtrackingu. Ponieważ RE2 w ogóle nie nawraca, grupy atomowe są zamieniane na grupy nieprzechwytujące (?:...), a kwantyfikatory ++ na standardowe zachłanne (+).

Czy przetwarzanie regex i tekstu jest bezpieczne?

Tak! 100% parsowania AST, oceny matrycy i dopasowywania wzorców wykonuje się lokalnie w Twojej przeglądarce za pomocą JavaScriptu. Żadne dane nie trafiają na nasze serwery.