我正在使用以下正则表达式来提取一些html:
(?i)(?:\<tr\s*class='list'[^\>]*\>)[^$+]*\</tr\>
问题是它没有正确地隔离TR。我正在尝试使用$+
再次引用标记选择器,以确保匹配的内容不再具有开始标记。这是示例html:
某些匹配中有多个<tr>
。请帮忙。
答案 0 :(得分:3)
我不知道您的想法[^$+]*
是什么意思,但它定义了匹配零次或多次的negated character class。换句话说,它匹配一个空字符串,或一个或多个不是文字美元符号或加号的字符。
HTML无法通过正则表达式进行简单解析(除非事先知道结构的外观),因为为了正确解析文档,您需要能够作为元素递归文档中的内容可以嵌套在自身内(例如,<div>
可以包含另一个<div>
)。虽然有些语言(你没有指定你使用的是什么)支持递归正则表达式(例如perl和PHP),但使用正确的DOM解析器比使用递归正则表达式更加有效(其复杂性不可抵抗) )无论如何!
答案 1 :(得分:1)
在您喜欢的DOM库中使用document.getElementsByTagName
并使用循环遍历nodeList,然后解析getAttribute('class')
。
我建议不要使用正则表达式,因为在正则表达式中断之前只是一个时间问题,除非你正在处理非常简单的标记,此外DOM只是为此而制作的。