【发布时间】:2013-08-20 05:24:17
【问题描述】:
我正在尝试使用 preg_match_all() 解析一些网页,其中一些非常大,有几 MB 大小。并且其中一个正则表达式匹配一些大到似乎无法匹配和获取它们的文本字符串。它只是返回一个空字符串。
当我手动选择其中一个字符串并将其保存为 .txt 文件时,它是 1.32MB 或 1,393,557 字节。
当字符串短得多只有几万字节时,该正则表达式成功匹配并获取它。
所以我的问题是,当我想到字符串 preg_match_all() 可以匹配的限制/最大长度时,它是什么以及如何将其设置得更大?
【问题讨论】:
-
为什么不用DOM解析器来解析网页。
-
@anubhava,因为网页可能不合规?
-
这更多是使用 DOM 的原因,因为 regex 更有可能破坏并产生意想不到的结果。
-
@kavoir.com:您认为正则表达式会更好地处理损坏的 HTML?正则表达式与 HTML 之类的语言一样糟糕。 PCRE 唯一的优点是它允许递归......但即使这样,如果 HTML 古怪或正则表达式没有仔细编写以避免一遍又一遍地匹配任何内容,它也会变得毛茸茸。
-
@kavoir.com: 任何时候你不能保证你收到的 HTML 的漂亮,一个诚实的 HTML 解析器通常会比一个正则表达式更有意义.举一个病态的例子,让我们以
<!DOCTYPE html><title id="</title><h1><<a "></html></title><input value="<a id=wat class=" disabled>ehh"><a id="wat" href="</div>">stuff</a></html>为例。根据 W3C,这是有效的 HTML。一个像样的 HTML 解析器会用它做正确的事情。但是由于各种原因,许多正则表达式不知道该怎么做。