1

什么正则表达式可以匹配嵌套表格和表格单元格中的可识别文本?我已经尝试但未能提出一个正则表达式来提取我想要的特定表,而不是在示例中抓取两个表的开头和结尾。这是开始的事情:“ <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”的表。什么正则表达式将专门匹配并且仅匹配该表?

4

3 回答 3

6

我不会对此使用正则表达式,因为 HTML 不是常规的,并且没有结束的边缘情况会让您感到困惑。你最好使用 HTML 解析器。无论您使用哪种语言或平台,都会有一种可用。

于 2009-10-01T17:22:57.510 回答
4

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

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

随着(?ms)您打开“多行匹配”(m)和“点也匹配换行符” (s)。然后你有一个消极的前瞻(?!),以确保你在比赛中没有第二次开始桌子。

于 2009-10-01T19:53:35.787 回答
1

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

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

$xml =~ /<table>.*<td>Code2<\/td>.*<\/table>/s;
于 2009-10-01T17:22:32.407 回答