灾难性的回溯问题
Catastrophic backtracking issue
当找不到匹配项时,我 运行 遇到了正则表达式模式的问题。
我使用的正则表达式模式是:
^(?:".*?",){4}"(?:.*?)Cookie:\s(?:.*?)Routing=(.*?);
作为测试数据,我使用了类似的东西:
"a","b","c","d","POST: /portal/start.asp HTTP/1.1\r\nHost: myhost\r\nCookie: w1n0_er=xxxx; routxing=yyyy;"x","x","x","x","x","x","x","x","x","x","x","x","x","x","x","x","x",
当找到 'routing' 参数时,一切正常。但是,当通过从测试数据中排除它找不到路由参数时,正则表达式会继续搜索。我通过其他帖子发现这是由灾难性回溯引起的,但我似乎无法找到避免它的方法。
将您的问题缩小到:
How to avoid catastrophic backtracking?
正则表达式方面:尽可能具体,正如 Rawing 在他的评论中所说,将 ".*?"
更改为 "[^"]*"
将大大减少引擎所需的回溯次数。
输入站点:如果可能,在不丢失信息的情况下将输入减少到您需要的最小部分。在这里,将您的输入更改为:
"a","b","c","d","POST: /portal/start.asp HTTP/1.1\r\nHost: myhost\r\nCookie: w1n0_er=xxxx; routxing=yyyy;"x","x","x","x","x","x","x","x","x","x","x","x","x","x","x","x","x",
到
"POST: /portal/start.asp HTTP/1.1\r\nHost: myhost\r\nCookie: w1n0_er=xxxx; Routing=yyyy;"
和正则表达式:
^".*?Cookie:\s.*?Routing=(.*?);
会有很大帮助。
当找不到匹配项时,我 运行 遇到了正则表达式模式的问题。
我使用的正则表达式模式是:
^(?:".*?",){4}"(?:.*?)Cookie:\s(?:.*?)Routing=(.*?);
作为测试数据,我使用了类似的东西:
"a","b","c","d","POST: /portal/start.asp HTTP/1.1\r\nHost: myhost\r\nCookie: w1n0_er=xxxx; routxing=yyyy;"x","x","x","x","x","x","x","x","x","x","x","x","x","x","x","x","x",
当找到 'routing' 参数时,一切正常。但是,当通过从测试数据中排除它找不到路由参数时,正则表达式会继续搜索。我通过其他帖子发现这是由灾难性回溯引起的,但我似乎无法找到避免它的方法。
将您的问题缩小到:
How to avoid catastrophic backtracking?
正则表达式方面:尽可能具体,正如 Rawing 在他的评论中所说,将 ".*?"
更改为 "[^"]*"
将大大减少引擎所需的回溯次数。
输入站点:如果可能,在不丢失信息的情况下将输入减少到您需要的最小部分。在这里,将您的输入更改为:
"a","b","c","d","POST: /portal/start.asp HTTP/1.1\r\nHost: myhost\r\nCookie: w1n0_er=xxxx; routxing=yyyy;"x","x","x","x","x","x","x","x","x","x","x","x","x","x","x","x","x",
到
"POST: /portal/start.asp HTTP/1.1\r\nHost: myhost\r\nCookie: w1n0_er=xxxx; Routing=yyyy;"
和正则表达式:
^".*?Cookie:\s.*?Routing=(.*?);
会有很大帮助。