RegEx从多行文本中提取html标签

时间:2016-02-24 06:26:06

标签: java html regex tags

我有这个html字符串,想要使用单一匹配RegEx提取<div.../div><p.../p>字符串,我尝试<p\b[^>]*>(.*?)</p>|<div class="sat">(.*)</div>但没有成功(我正在使用JAVA构建Android应用):

<div class="soo"> 
<hr/> 
<a id="soo:1"> 
</a> 
<span class="sat"> 1
</span> first text
<hr/> 
</div> 

<p class="bsm"> 
<a id="ayeh:1:1" class="qay"> (1) </a> HI!
</p>

2 个答案:

答案 0 :(得分:1)

我发现JSOUP更适合处理HTML文件。 JSOUP Android Library

答案 1 :(得分:0)

如果你可以保证永远不会有嵌套标签,并且所有标签都已正确关闭,那么你就有了正则表达式的战斗机会,但只有这样。

三个小修改:

  • 始终使用延迟量词(在所有匹配的.* s上)
  • 使用(?s)(“DOTALL”)模式修饰符
  • 不要忘记将Java字符串中的反斜杠加倍,否则\b将尝试匹配退格字符而不是字边界

这个正则表达式:

(?s)<p\b[^>]*>(.*?)</p>|<div class="sat">(.*?)</div>

在Java中使用:

Pattern regex = Pattern.compile("<p\\b[^>]*>(.*?)</p>|<div class=\"sat\">(.*?)</div>", Pattern.DOTALL);