Woran erkenne ich einen bösen Regex?

Ich bin kürzlich darauf aufmerksam gewordenRegulärer Ausdruck Denial of Service Angriffe, und beschlossen, sogenannte "böse" Regex-Muster auszurotten, wo immer ich sie in meiner Codebasis finden konnte - oder zumindest diejenigen, die für Benutzereingaben verwendet werden. Die Beispiele auf derOWASP-Link über undWikipedia sind hilfreich, aber sie können das Problem nicht in einfachen Worten erklären.

Eine Beschreibung von bösen Regexen, ausWikipedia:

Der reguläre Ausdruck wendet die Wiederholung ("+", "*") auf einen komplexen Unterausdruck an.Für den wiederholten Teilausdruck gibt es eine Übereinstimmung, die auch ein Suffix einer anderen gültigen Übereinstimmung ist.

Mit Beispielen nochmal ausWikipedia:

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

Ist das ein Problem, für das es keine einfachere Erklärung gibt? Ich suche nach etwas, das es einfacher macht, dieses Problem beim Schreiben von Regexen zu vermeiden oder sie in einer vorhandenen Codebasis zu finden.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage