【发布时间】:2011-07-14 00:46:36
【问题描述】:
我正在尝试使用 RegEx 解析网页,但在使其以可靠的方式工作时遇到了一些问题。
假设我想解析创建 div 元素的代码,并且我想提取 <div> 和 </div> 之间的所有内容。现在,这段代码可能只是<div></div>,但也很可能是这样的:
<div class="thisIsMyDivClass"><p>This text is inside the div</p></div>
如何确保无论初始 div 标签的大于/小于符号与对应的最后一个 div 标签之间有多少个字符,我将始终仅 获取它们之间的内容?如果我指定< 后面的字符数可以从一到一万不等,我将始终在一万个字符之后提取>,因此(很可能,除非有很多代码或文本之间)检索一堆我不需要的代码。
这是我目前的代码(由于上述原因不可靠):
/<.{1,10000}>/
【问题讨论】:
-
最好的办法是使用适当的 HTML 解析器。您使用什么语言?
-
我正在使用 PHP。希望有一些关于如何以最有效的方式做到这一点的好技巧。
-
你可以使用
<[^>]*>之类的东西,但就像其他人所说的那样,你需要一个合适的解析器。 -
就上下文而言,这是 StackOverflow 上最常见的问题之一,this being the most famous version。由于您所述的原因和其他原因(包含“>”等的属性),使用正则表达式不可能 100% 可靠。在某些情况下,您可以使用类似@DevNull 的粗略方法,但请注意其局限性。