除了以下内容之外,删除粗体和斜体的更安全的方法是什么?
String text = "<b>Remove <i>bold</i> and italics</b>";
System.out.println(text);
text = text.replaceAll("\\<.*?\\>", ""); //remove all but only want to remove b and i?
System.out.println(text);
此外,还有更多可扩展性(如果我想包含其他标签,如“strong”或“em”,并允许区分大小写“b”与“B”等,。)?
答案 0 :(得分:7)
你可以使用这个正则表达式:
<\/?[bi]>
代码:
String text = "<b>Remove <i>bold</i> and italics</b>";
text = text.replaceAll("<\\/?[bi]>", "");
System.out.println(text);
<强>输出强>
Remove bold and italics
如果您希望匹配不区分大小写,则可以使用corresponding flag (?i)
<强>说明强>
答案 1 :(得分:2)
您可以使用Jsoup
清除Whitespace
。 Whitespace
是可扩展的,包括要省略的属性。
根据这里的javadoc
白名单定义允许通过的HTML(元素和属性) 清洁工。其他一切都被删除了。 ...
如果你需要允许更多(请小心!),调整一个基地 白名单:
- addTags(java.lang.String中......)
- addAttributes(java.lang.String,java.lang.String ...)
- addEnforcedAttribute(java.lang.String,java.lang.String,java.lang.String)
- addProtocols(java.lang.String,java.lang.String,java.lang.String ...)
在您的代码中:
String text = "<b>Remove <i>bold</i> and italics</b>";
System.out.println(text);
String doc = Jsoup.clean(text, new Whitelist());
System.out.println(doc);
给出:
<b>Remove <em>bold</i> and italics</b>
Remove bold and italics
答案 2 :(得分:0)
使用像JSoup
库之类的东西,而不是使用正则表达式来解析HTML,这将使您的生活更轻松,并使其更具可扩展性。这是一些示例代码
Document doc = Jsoup.parse(content);
Elements elements = doc.getElementsByTag("b");
for (Element pre : elements) {
pre.remove();
}
要删除斜体,请将"b"
替换为"i"
<强>更新强>
我没有测试过以下代码,但可能会有效。
JSoup允许选择类似css的选择器,因此像doc.select("strong, em, b, i");
这样的东西应该返回Elements