Potencjalny błąd StackOverflow w wyrażeniu regularnym

Potencjalny błąd StackOverflow w wyrażeniu regularnym
Bambo
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 779
0

Cześć, nie jestem super w regexpy i mam problem z sonarem.

Potrzebuję regexp, który sprawdza conajmniej 3 puste linie. Zrobiłem najpierw coś takiego:
(\n){3,}

ale nie wykrywało linii jak były jakieś spacje, więc zupdatowałem na

(\n(\\s*){3,}

i działa, ale sonar krzyczy: Refactor this repetition that can lead to a astack overflow for large inputs

Jak mogę to zmienić?

Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10227
2
Bambo napisał(a):

Cześć, nie jestem super w regexpy i mam problem z sonarem.

Potrzebuję regexp, który sprawdza conajmniej 3 puste linie. Zrobiłem najpierw coś takiego:
(\n){3,}

ale nie wykrywało linii jak były jakieś spacje, więc zupdatowałem na

(\n(\\s*){3,}

Brakuje Ci nawiasu, spróbuj (\n\s*){3,}.

Noi pytanie jakie końcówki linii chcesz ogarniać, czy faktycznie LF, czy może też CRLF, więc np: (\r?\n\s*){3,}.

Bambo
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 779
0

Hm dla tego co napisałeś właśnie sonar krzyczy również

SE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 321
0

A cos takiego?:

Kopiuj
(\n\s.*){3,}
_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0

Wg mnie powinno być: (\\s*\n){3,} lub uwzględniając post od @Riddle, (\\s*\r?\n){3,}

Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10227
3
_13th_Dragon napisał(a):

Wg mnie powinno być: (\\s*\n){3,} lub uwzględniając post od @Riddle, (\\s*\r?\n){3,}

Chociaż w sumię tak jak teraz o tym myślę, to to jest potencjalne zagrażenie catastrophic backtracking, bo \s ma w sobie \n. Mądrzej byłoby ([ \t]*\r?\n){3,}

PI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2787
0

Każdy regexp ma potencjalne 100 błędów :D

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.