首页 新闻 会员 周边

C# 正则表达时匹配多行 html tag 时的贪婪匹配问题

0
悬赏园豆:10 [已解决问题] 解决于 2024-01-14 07:06

比如这样的 html table 代码

<table>
    <tr>
        <td>test1</td>
        <td>test2</td>
        <td>test3</td>
        <td>test4</td>
    </tr>
    <tr>
        <td>test5</td>
        <td>www.cnblogs.com</td>
        <td>test6</td>
        <td>test7</td>
    </tr>
    <tr>
        <td>test8</td>
        <td>test9</td>
        <td>test10</td>
        <td>test11</td>
    </tr>
    <tr>
</table>

如果使用下面的正则表达式

<tr[^>]*>[\s\S]*?cnblogs[\s\S]*?</tr>

会匹配出下面的内容,多匹配了一个 <tr>

<tr>
        <td>test1</td>
        <td>test2</td>
        <td>test3</td>
        <td>test4</td>
    </tr>
    <tr>
        <td>test5</td>
        <td>www.cnblogs.com</td>
        <td>test6</td>
        <td>test7</td>
    </tr>
dudu的主页 dudu | 高人七级 | 园豆:30943
提问于:2024-01-14 06:21
< >
分享
最佳答案
0

参考 stackoverflow 上的回答,通过 negative lookahead (?!</tr>) 解决了

<tr[^>]*>([\s\S](?!</tr>))*cnblogs[\s\S]*?</tr>
dudu | 高人七级 |园豆:30943 | 2024-01-14 07:05
dudu | 园豆:30943 (高人七级) | 2024-01-14 07:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册