为什么这个看起来无辜的正则表达式会杀死我的请求?
const links = new Set;
const skip = [];
list.forEach( (v, i) => {
v.forEach( j => {
if (skip.indexOf(j) === -1) {
links.add([i, j]);
}
})
skip.push(i);
})
这是catastrophic backtracking的候选人吗?
在.NET framework 4.5.2,C#
上运行答案 0 :(得分:2)
要匹配文字点,您必须将其转义。如果不这样做,量化的组([\d\w-]+.){6}
将导致具有更长输入的灾难性回溯。更改为([\w-]+\.){6}hi
。
请注意[\d\w-]+
匹配1个或更多(未知数字)字母,数字,_
或-
。 .
匹配任何字符。应用量词时,正则表达式引擎会尝试所有可能的方法来匹配字符串,然后才能失败。找到匹配项的字符串通常不会出现问题,它通常发生在无法找到匹配项的字符串中,因为尝试了所有可能的方法(直到引擎报告崩溃)。
此外,\d
模式匹配数字,\w
匹配数字,因此在字符类中使用两者都没有意义。