Regex 为什么邪恶的正则表达式会导致重做?

Regex 为什么邪恶的正则表达式会导致重做?,regex,Regex,目前我正在研究重做:定期明确拒绝服务 某些错误(邪恶)的正则表达式将导致验证性能低下 但为什么。。。。我搜索wiki和owasp,答案主要是NFA DFA,我几乎无法理解 有谁能帮我解释一下……的好例子吗?它叫 当不存在匹配时会发生,但有O(2n)种不匹配的方法必须在返回false之前进行研究 来自的链接文章中的示例是(x+x++y,当与xxxxxxxxx的输入一起使用时,将需要大约2500个步骤来发现不匹配。添加一个x,需要5000个步骤,依此类推。输入100xs,就意味着数十亿年的计算时间

目前我正在研究重做:定期明确拒绝服务

某些错误(邪恶)的正则表达式将导致验证性能低下

但为什么。。。。我搜索wiki和owasp,答案主要是NFA DFA,我几乎无法理解

有谁能帮我解释一下……的好例子吗?

它叫

当不存在匹配时会发生,但有O(2n)种不匹配的方法必须在返回
false
之前进行研究

来自的链接文章中的示例是
(x+x++y
,当与
xxxxxxxxx
的输入一起使用时,将需要大约2500个步骤来发现不匹配。添加一个
x
,需要5000个步骤,依此类推。输入100
x
s,就意味着数十亿年的计算时间

原因是有
m
方法可以匹配
x+x+
m
x
s,也有
n/m
方法可以在
n
x
上重复
m
可以是小于
n
的任意数。探索树就像一棵分割输入方式的二叉树,导致O(2n)的时间复杂性。

它被称为

当不存在匹配时会发生,但有O(2n)种不匹配的方法必须在返回
false
之前进行研究

来自的链接文章中的示例是
(x+x++y
,当与
xxxxxxxxx
的输入一起使用时,将需要大约2500个步骤来发现不匹配。添加一个
x
,需要5000个步骤,依此类推。输入100
x
s,就意味着数十亿年的计算时间


原因是有
m
方法可以匹配
x+x+
m
x
s,也有
n/m
方法可以在
n
x
上重复
m
可以是小于
n
的任意数。探索树就像一棵分割输入方式的二叉树,导致O(2n)的时间复杂性。

你了解NFA是什么以及它是如何工作的吗?@Bergi不,我不了解NFADo你了解NFA是什么以及它是如何工作的?@Bergi不,我不了解NFA