2013-08-28 46 views
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> 

我不能假设输入或跨度会在那里,我也不能假设有一定之前两个​​标签或后两个标签。

我的尝试似乎总是拉弦的整个启动:

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

永远不要用正则表达式解析html。改用HTML解析器。 – alecxe

+0

我很喜欢,但是我使用的所有html解析器都是单引号,双引号和lt gt符号。 – tophersmith116

+1

You _want_' "'成为''',对吗?如果没有,只需在事后用'"'替换'''。 – Taymon

回答

2

与你的情况的问题在于,要找到匹配的标签(在打开和关闭标签之前,文本你”后,重新搜索)。正则表达式不能这样做。它不能解析像HTML这样的嵌套结构。正则表达式解析常规语言,HTML不是其中之一。先进的正则表达式引擎有时可能被强迫做差不多你在这里要做的事情,但它通常比它的价值更麻烦。

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

相关问题