Potencjalny błąd StackOverflow w wyrażeniu regularnym

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ć?

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

0

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

0

A cos takiego?:

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

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

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,}

0

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1