我有一个这样的java字符串:
String string = "I <strong>really</strong> want to get rid of the strong-tags!";
我想删除标签。我还有一些其他字符串的标签更长,所以我想找到一种方法来删除“<>”字符之间的所有内容,包括那些字符。
一种方法是使用将字符串与正则表达式进行比较的内置字符串方法,但我不知道如何编写这些方法。
在使用正则表达式解析 HTML 时建议小心(由于其允许的复杂性),但是对于“简单”HTML 和简单文本(没有文字<
或>
其中的文本),这将起作用:
String stripped = html.replaceAll("<.*?>", "");
为了避免正则表达式:
String toRemove = StringUtils.substringBetween(string, "<", ">");
String result = StringUtils.remove(string, "<" + toRemove + ">");
对于多个实例:
String[] allToRemove = StringUtils.substringsBetween(string, "<", ">");
String result = string;
for (String toRemove : allToRemove) {
result = StringUtils.remove(result, "<" + toRemove + ">");
}
Apache StringUtils函数是 null-、empty- 和非匹配安全的
你应该使用
String stripped = html.replaceAll("<[^>]*>", "");
String stripped = html.replaceAll("<[^<>]*>", "");
where<[^>]*>
匹配以 开头的子字符串<
,然后是零个或多个字符以外>
的字符(或除<
and以外的字符,>
如果您选择第二个版本),然后是一个>
字符。
注意<.*?>
(?s)<.*?>
, <(?s:.)*?>
,<[\w\W]*?>
和许多其他效率不高的变体来解决。请参阅正则表达式演示。