2 回答

TA贡献1995条经验 获得超2个赞
众所周知,如果您尝试捕获完整的标签数据并尝试对其进行操作,强烈建议不要使用正则表达式解析 HTML。但是如果你只是想去掉所有标签,或者有条件地去掉一些标签,比如在这种情况下,你想删除除标签之外的所有<br>
标签,你可以使用这个正则表达式,
<\/?(?!br>)\w+[^>]*>
解释:
<
- 匹配标签的开始\/?
- 可选地匹配/
匹配的结束标签(?!br>)
- 如果标签名称是,则拒绝匹配br
\w+
- 匹配任何由单词字符组成的标签名称[^>]*
- 可选地允许标签属性匹配>
- 匹配关闭标签
示例 Java 代码,
String s = "Hello. How can I help you?<br>I don't know<br>Use the link <a \r\n" +
"href=\"www.google.com\" target=\"_blank\">Google</a></br>Hello. <sometag>somedata</sometag> hey <br1>somedata</br2> hello <1br>somedata</1br> How can I help you?<br>I don't know<br>Use the link <a \r\n" +
"href=\"www.google.com\" target=\"_blank\">Google</a></br>";
System.out.println(s.replaceAll("</?(?!br>)\\w+[^>]*>", ""));
在删除除<br>and之外的所有标签的地方打印此内容</br>,
Hello. How can I help you?<br>I don't know<br>Use the link Google</br>Hello. somedata hey somedata hello somedata How can I help you?<br>I don't know<br>Use the link Google</br>
编辑:正如Lino在他的评论中提到的,如果您的标签名称在br文本周围有可选空格,您可以使用以下允许可选空格的正则表达式,
<\s*\/?\s*(?!br\s*>)\w+[^>]*>
演示允许 br 标签中的可选空间

TA贡献1826条经验 获得超6个赞
使用解析 HTMLregex不是一个好主意。如果您确定它始终是 HTML,我建议您使用Jsoup它会自动使用您的 html 并返回文档。
Document doc = Jsoup.parse(sb.toString());
printChilds(doc.body().childNodes());
public static void printChilds(List<Node> node)
{
for (Node n : node)
{
if (n.childNodeSize() == 0)
System.out.print(n.toString());
else
printChilds(n.childNodes());
}
}
将输出Hello. How can I help you?<br>I don't know<br>Use the link Google<br>
添加回答
举报