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.
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.