首页 > 解决方案 > 如何使用正则表达式避免 html 块

问题描述

我必须使用正则表达式找到由“[”和“]”包围的所有字符串,但要避免<table></table>块内的字符串,例如:

<html>
<body>
<p><table>
   <tbody>
      <tr>
         <td style="border-style: solid; border-width:1px;">
            <span style="font-family: Courier;">[data1]</span>
         </td>
         <td style="border-style: solid; border-width:1px;">
            <span style="font-family: Courier;">[data10]</span>
         </td>
      </tr>
   </tbody>
</table>
</p>
<p>[data3]&nbsp;&nbsp;[data4]&nbsp;&nbsp;[data5]</p>
</body>
</html>

在这种情况下,应该只找到 [data3]、[data4] 和 [data5]。到目前为止,我有这个: @"(((?<!<span>)(\[[a-zA-Z_0-9]+)](?!<\/span>))|((?<!<span>)(\[[a-zA-Z_0-9]+)])|((\[[a-zA-Z_0-9]+)](?!<\/span>)))(?!.*\1)" 找到所有没有被标签包围的 [] 块,我尝试添加一个负面的前瞻和后视,但它不起作用,它仍然会获取表格块内的那些。

希望你们能帮助我解决这个问题。

标签: htmlregex

解决方案


下面的正则表达式将返回包含在<p> </p>标签中的所有 [数据]。

/<p.*?>\[(.*?)\]<*.p>/g

所以上面的正则表达式<p>[data3]&nbsp;&nbsp;[data4]&nbsp;&nbsp;[data5]</p>将从你上面的 HTML 代码中返回这个。

当您从上面的正则表达式获取该字符串时,然后使用下面的正则表达式仅获取所有 [data] 字符串。

/\[(.*?)\]/g

所以上面的正则表达式将从上面的字符串返回“ [data3][data4][data5] ”。


推荐阅读