25 de setembro de 2022 • 1 min de leitura
Expressões regulares são uma ferramenta poderosa para encontrar padrões em textos. Mas, nem tudo são flores.. Uma das coisas que podem atrapalhar o uso de expressões regulares é o Catastrophic Backtracking.
O Catastrophic Backtracking é um problema que ocorre quando uma expressão regular é executada em um texto muito grande e que possui um padrão muito específico. O interpretador da expressão regular acaba levando bastante tempo para encontrar o padrão e, por isso, ou o sistema fica lento ou até mesmo pode travar por causa disto.
Um exemplo de como esse problema realmente é sério:
Imagine que no front você tenha um input de texto, e que por algum motivo você utiliza uma expressão regular para validar esse texto digitado. Se o usuário ou uma pessoa mal intencionada digitar um texto muito grande e que contenha um padrão específico, com certeza o Catastrophic Backtracking irá ocorrer, e o estrago você já sabe.
Exemplo do site Regular-Expressions.info utilizando a regex ^(.*?,){11}P
no RegexBuddy’s debugger:
+
ou *
, use-os apenas quando necessário!*
- Corresponde ao caractere precedente zero ou mais vezes. Por exemplo, zo*
corresponde a z
ou zoo
.+
- Corresponde ao caractere precedente uma ou mais vezes. Por exemplo, zo+
corresponde a zoo
, mas não a z
.Fontes: