我正在研究谷歌的re2
实现,我想使用一些不受信任的来源给出的正则表达式进行正则表达式匹配。我已经浏览了以下资源 -
使用PCRE,我们可以进入一些非常糟糕的情况,并且可能需要指数时间来匹配。例如对于正则表达式(.*)+b
和类似aaaaaaaaa...
的字符串,可能需要O(c^n)
时间n
是字符串的长度。
更多的DOS表达式记录了here。
我理解re2
将针对给定的正则表达式在给定的字符串长度的线性时间内进行匹配。现在,我的问题是,如果我能够在re2
中编译正则表达式,并且我对正则表达式模式的长度施加限制,那么我保证它不会遇到提到的一些DOS情况在上面的链接或其他一些正则表达式?
答案 0 :(得分:0)
不,如果字符串的长度和正则表达式的长度都有上限,则re2
不能为DOS。但是,在从PCRE迁移某些模式或以其他方式使用它时,您需要确保可以编译正则表达式模式,因为实现不支持许多PCRE功能,如反向引用。