1

我在单个字符串中有一些 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>

我不能假设 input 或 span 会在那里,也不能假设前面一定有两个标签或后面有两个标签。

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

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

1 回答 1

2

您的情况的问题是您想要找到匹配的标签(您正在搜索的文本之前和之后的打开和关闭标签)。正则表达式无法做到这一点。它不能解析像 HTML 这样的嵌套结构。正则表达式解析常规语言,而 HTML 不是其中之一。高级正则表达式引擎有时可能会被迫执行在此处尝试执行的操作,但这通常比它的价值更麻烦。

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

于 2013-08-28T15:48:56.933 回答