什么正则表达式将嵌套表与表格单元格中的可识别文本匹配?

时间:2009-10-01 17:19:46

标签: regex html-parsing

什么正则表达式将嵌套表与表格单元格中的可识别文本匹配?我已经尝试但未能提出一个正则表达式来提取我想要的特定表,而不是抓住示例中两个表的开头和结尾。以下是开始使用的内容:“<table>.*?</table>

<table>
    <tr>
        <td>
            <table>
                <tr><td>Code1</td></tr>
                <tr><td>some data</td></tr>
                <tr><td>etc ...</td></tr>
            </table>
        </td>
    </tr>
    <tr>
        <td>
            <table>
                <tr><td>Code2</td></tr>
                <tr><td>some data</td></tr>
                <tr><td>etc ...</td></tr>
            </table>
        </td>
    </tr>
</table>

假设我要提取包含“Code2”的表。什么正则表达式将具体匹配,只有那个表?

3 个答案:

答案 0 :(得分:6)

我不会在这方面使用正则表达式,因为HTML不是常规的,并且没有结束边缘情况会让你失望。你最好使用HTML解析器。无论您使用哪种语言或平台,都可以使用。

答案 1 :(得分:4)

以下正则表达式将找到您的表格:

(?ms)<table>((?!<table>).)*<td>Code2</td>.*?</table>

使用(?ms)启用“多行匹配”(m)和“点匹配换行符”(s)。然后你有一个负面的预测(?!),以确保你的比赛中没有第二次开始表。

答案 2 :(得分:1)

不要使用正则表达式。使用HTML解析器!

但是,在Perl中(假设您没有嵌套表):

$xml =~ /<table>.*<td>Code2<\/td>.*<\/table>/s;