我有一个字符串生成器对象“ sb”,看起来像-
Hello. How can I help you?<br>I don't know<br>Use the link <a
href="www.google.com" target="_blank">Google</a><br>
这只是一个示例,它可以具有任何种类的html标签。如何从对象中删除所有可能的HTML标记(除了br标记)。
我一直在尝试使用下面的代码从sb对象中删除所有html标签,但似乎无法正常工作。另外,不确定如何为br标签设置例外。
sb.replaceAll("<.*?>", "");
答案 0 :(得分: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>
和</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+[^>]*>
答案 1 :(得分:0)
使用regex
解析HTML不是一个好主意。如果您确定它始终是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>