【发布时间】:2016-12-26 13:25:54
【问题描述】:
当没有找到匹配项时,我遇到了正则表达式模式的问题。
我使用的正则表达式模式是:
^(?:".*?",){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",
找到“路由”参数后,一切正常。但是,当从测试数据中排除路由参数未找到时,正则表达式会继续搜索。我从其他帖子中发现这是由灾难性回溯引起的,但我似乎找不到避免它的方法。
【问题讨论】:
-
一个好的开始方法是将
".*?"更改为"[^"]*"。 -
你真正想搜索什么?
-
既然你已经知道在哪里搜索,先提取第5个引用的字符串,然后检查它是否包含你想要的。
-
您的输入包含大量双引号字符串。这是您在
".*?"模式上遇到灾难性回溯的两个主要原因之一,该模式扩展了太多次以满足引擎。
标签: regex backtracking