我在单个字符串中有一些html,可能有也可能没有换行符。它可能看起来像这样:
<table><tr><th>blah1</th></tr><tr><input class="inputClass"><span>open<pfelclose/>pfelsingle'pfeldouble"pfel</span></input></tr></table>
很好地格式化:
<table>
<tr>
<th>blah1</th>
</tr>
<tr>
<input class="inputClass">
<span>open<pfelclose/>pfelsingle'pfeldouble"pfel</span>
</input>
</tr>
</table>
我想搜索此字符串
(open<pfel|close/>pfel|single'pfel|double"pfel)
但之前还有两个打开的标签和之后的两个关闭标签。所以我想得到类似的东西:
<input class="inputClass"><span>open<pfelclose/>pfelsingle'pfeldouble"pfel</span></input>
我不能假设输入或跨度存在,我也不能假设之前有两个标签或之后有两个标签。
我的尝试似乎总是拉动字符串的整个开头:
.*[<]{0,2}?(open<pfel|close/>pfel|single'pfel|double"pfel)[/>]{0,2}?
答案 0 :(得分:2)
您的情况遇到的问题是您要查找匹配的标记(您正在搜索的文本之前和之后的打开和关闭标记)。正则表达式不能这样做。它无法解析像HTML这样的嵌套结构。正则表达式解析常规语言,HTML不是一个。高级正则表达式引擎有时可以强制执行几乎你要在这里做的事情,但它通常比它的价值更麻烦。
您在评论中的解决方案可能是正确的。使用正则表达式查找您要查找的内容,然后使用HTML解析器获取所需内容。