正则表达式获取前一个和下一个标签

时间:2013-08-28 13:32:15

标签: html regex

我在单个字符串中有一些html,可能有也可能没有换行符。它可能看起来像这样:

<table><tr><th>blah1</th></tr><tr><input class="inputClass"><span>open&lt;pfelclose/>pfelsingle'pfeldouble"pfel</span></input></tr></table>

很好地格式化:

<table>
  <tr>
    <th>blah1</th>
  </tr>
  <tr>
    <input class="inputClass">
      <span>open&lt;pfelclose/>pfelsingle'pfeldouble"pfel</span>
    </input>
  </tr>
</table>

我想搜索此字符串

(open<pfel|close/>pfel|single'pfel|double"pfel)

但之前还有两个打开的标签和之后的两个关闭标签。所以我想得到类似的东西:

<input class="inputClass"><span>open&lt;pfelclose/>pfelsingle'pfeldouble"pfel</span></input>

我不能假设输入或跨度存在,我也不能假设之前有两个标签或之后有两个标签。

我的尝试似乎总是拉动字符串的整个开头:

.*[<]{0,2}?(open<pfel|close/>pfel|single'pfel|double"pfel)[/>]{0,2}?

1 个答案:

答案 0 :(得分:2)

您的情况遇到的问题是您要查找匹配的标记(您正在搜索的文本之前和之后的打开和关闭标记)。正则表达式不能这样做。它无法解析像HTML这样的嵌套结构。正则表达式解析常规语言,HTML不是一个。高级正则表达式引擎有时可以强制执行几乎你要在这里做的事情,但它通常比它的价值更麻烦。

您在评论中的解决方案可能是正确的。使用正则表达式查找您要查找的内容,然后使用HTML解析器获取所需内容。