RegEx在HTML标记之间提取文本

时间:2013-03-28 15:18:01

标签: java regex

我正在寻找一个正则表达式,它必须在不同类型的HTML标记之间提取文本。

例如:

<span>Span 1</span> - O / p:跨度1

<div onclick="callMe()">Span 2</div> - O / p:跨度2

<a href="#">HyperText</a> - O / p:超文本

我从here找到了这个特殊的作品<([A-Z][A-Z0-9]*)\b[^>]*>(.*?)</\1>但是这个作品没有用。

3 个答案:

答案 0 :(得分:7)

您的评论显示您忽略了逃避正则表达式字符串中的反斜杠。

如果您想匹配小写字母,请将a-z添加到字符类中,或使用Pattern.CASE_INSENSITIVE(或将(?i)添加到正则表达式的开头)

"<([A-Za-z][A-Za-z0-9]*)\\b[^>]*>(.*?)</\\1>"

如果代码内容可能包含换行符,请使用Pattern.DOTALL或将(?s)添加到正则表达式的开头以启用dotall / singleline模式。

答案 1 :(得分:1)

这应该符合您的需求:

<([a-zA-Z]+).*?>(.*?)</\\1>

第一组包含标签名称,第二组包含中间值。

答案 2 :(得分:-1)

一种非常具体的方式:

(<span>|<a href="#">|<div onclick="callMe\(\)">)(.*)(</span>|</a>|</div>)

但是,这只适用于这三个例子。您需要使用HTML解析器。