Como posso reconhecer um regex maligno?

Eu recentemente me dei conta deExpressão Regular Negação de Serviço ataques, e decidi erradicar os padrões de regex 'malignos' onde quer que eu pudesse encontrá-los em minha base de código - ou pelo menos aqueles que são usados ​​na entrada do usuário. Os exemplos dados noLink OWASP acima ewikipedia são úteis, mas eles não fazem um ótimo trabalho de explicar o problema em termos simples.

Uma descrição de regexes malignos, dewikipedia:

a expressão regular aplica repetição ("+", "*") a uma subexpressão complexa;para a subexpressão repetida, existe uma correspondência que também é um sufixo de outra correspondência válida.

Com exemplos, novamente dewikipedia:

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

Este é um problema que simplesmente não tem uma explicação mais simples? Estou procurando algo que facilite evitar esse problema ao escrever regexes ou encontrá-los em uma base de código existente.

questionAnswers(8)

yourAnswerToTheQuestion