Jak mogę rozpoznać zły regex?

Ostatnio zdałem sobie z tego sprawęWyrażenie regularne Denial of Service atakuje i postanowił wykorzenić tak zwane „złe” wzorce regex wszędzie tam, gdzie mogłem je znaleźć w moim kodzie źródłowym - lub przynajmniej te, które są używane na wejściu użytkownika. Przykłady podane wŁącze OWASP powyżej iwikipedia są pomocne, ale nie radzą sobie z wyjaśnianiem problemu w prosty sposób.

Opis złych regexów zwikipedia:

wyrażenie regularne stosuje powtarzanie („+”, „*”) do złożonego podwyrażenia;dla powtórnego podwyrażenia istnieje dopasowanie, które jest również przyrostkiem innego ważnego dopasowania.

Z przykładami ponownie zwikipedia:

(a+)+([a-zA-Z]+)*(a|aa)+(a|a?)+(.*a){x} dla x> 10

Czy to problem, który nie ma prostszego wyjaśnienia? Szukam czegoś, co ułatwiłoby uniknięcie tego problemu podczas pisania wyrażeń regularnych lub znajdowanie ich w istniejącej bazie kodu.

questionAnswers(8)

yourAnswerToTheQuestion