【发布时间】:2015-11-03 19:39:19
【问题描述】:
我正在尝试使用 PHP 抓取一系列网页,抓取标签和最早标签之间的所有内容。这是我正在使用的正则表达式:
|(?<=div id="body">).*?</div>|s
对于我正在查看的大多数页面,这似乎工作得很好。但是,它并没有为其他一些人返回任何东西。我将正则表达式插入 regex101.com 测试器,它告诉我问题出在灾难性的回溯上。我尝试删除后视语言,甚至玩弄以下内容:
|id="body">.*?</div>|s
但是,问题仍然存在。我查看了有关灾难性回溯的其他一些问题,以及 http://www.regular-expressions.info/catastrophic.html 文章,但我不知道如何将它们的修复应用到这种特殊情况。
【问题讨论】:
-
我不认为这会陷入灾难性的回溯。您能否将我们链接到您尝试过的 regex101 示例?
-
为什么需要后视?
div id="body">.*?</div>也可以。 -
因为这是一个固定宽度的lookbehind并且结尾是一个文字,
.*?不应该导致回溯问题。