0

我想使用正则表达式(与pcre兼容)来选择 XML 或 HTML 文件中的表格单元格。
该单元格扩展为几行,其中包含其他元素以及相关属性和值。这个
单元格应该在最后一列。

由于某些原因,我不能也不想使用“ . matches newline”选项。

例如在此代码中:
编辑:

<table colcount="4">
<tr>
    <td colspan="2">
        <para><text> Mike</text></para>
    </td>
    <td>
        <tab />
    </td>
    <td1>
        <para><text>Jack</text></para>
        <para><text>Sarah</text></para>
    </td>
</tr1>
<tr>
    <td>
        <para><text>Bob</text></para>
        <para><text>Rita</text></para>
    </td>
    <td2 colspan="3" with>
        <para><text>Helen</text></para>
    </td>
</tr2>
<tr>
    <td style="with:445px;">
        <para><text>Sam</text></para>
    </td>
    <td>
        <para><text>Emma</text></para>
        <para><text>George</text></para>
    </td>
    <td>
    </td>
    <td3 colspan="">
        <tab />
    </td>
</tr3>
</table>

/已编辑

我想找到并选择整个最后一个单元格及其开始和结束标记(<td</td>
以及相应行的结束标记(</tr>),即:

编辑:

这是我想使用 RegEx 在上表中选择的内容:

来自<td1 to </tr1>- 或来自<td2 to </tr2>- 或来自<td3 to </tr3>

/已编辑

格式(必须保留缩进和新行),我的意思是我不能放,例如
</tr>放在单元格(</td>)的结束标记之前。
缩进只是空格字符

谢谢你的帮助...

4

1 回答 1

0

使用正则表达式可以做的最好的事情是:

<td(([^<]|<(?!\/td>))*)<\/td>\s*<\/tr>(?!(.|\r|\n)*<tr)

但这有点丑陋,资源密集,并且当您有嵌套表时会中断。更好的方法确实是为您使用的任何一种编程语言使用 XML 或 HTML 解析器。

如果您想从每一行中选择最后一个单元格,正如您更新的问题所建议的那样,请忽略负前瞻,如下所示:

<td(([^<]|<(?!\/td>))*)<\/td>\s*<\/tr>

这里的工作示例:http ://refiddle.com/gt2

于 2013-08-28T17:21:51.967 回答