最后匹配字符串问题

时间:2010-11-19 21:13:45

标签: regex

我正在使用以下正则表达式来提取一些html:

(?i)(?:\<tr\s*class='list'[^\>]*\>)[^$+]*\</tr\>

问题是它没有正确地隔离TR。我正在尝试使用$+再次引用标记选择器,以确保匹配的内容不再具有开始标记。这是示例html:

http://www.pastie.org/1311827

某些匹配中有多个<tr>。请帮忙。

2 个答案:

答案 0 :(得分:3)

我不知道您的想法[^$+]*是什么意思,但它定义了匹配零次或多次的negated character class。换句话说,它匹配一个空字符串,或一个或多个不是文字美元符号或加号的字符。

HTML无法通过正则表达式进行简单解析(除非事先知道结构的外观),因为为了正确解析文档,您需要能够作为元素递归文档中的内容可以嵌套在自身内(例如,<div>可以包含另一个<div>)。虽然有些语言(你没有指定你使用的是什么)支持递归正则表达式(例如perl和PHP),但使用正确的DOM解析器比使用递归正则表达式更加有效(其复杂性不可抵抗) )无论如何!

答案 1 :(得分:1)

在您喜欢的DOM库中使用document.getElementsByTagName并使用循环遍历nodeList,然后解析getAttribute('class')

我建议不要使用正则表达式,因为在正则表达式中断之前只是一个时间问题,除非你正在处理非常简单的标记,此外DOM只是为此而制作的。