您应该将解析留给DOM解析器(
see this question).我几乎可以保证你必须这样做才能在< p>中找到文字.标签.
对于替换逻辑,String.replaceAll使用正则表达式,它可以进行所需的匹配.
您想要的正则表达式中的“通配符”是.*表达式.使用你的例子:
String ampStr = "This &escape;String";
String removed = ampStr.replaceAll("&.*;", "");
System.out.println(removed);
这输出此字符串.这是因为.表示任何字符,*表示“此字符0次或更多次”.所以.*基本上意味着“任意数量的字符”.然而,喂它:
"This &escape;String &anotherescape;Extended"
可能不会做你想要的,它会输出This Extended.要解决此问题,请准确指定要查找的内容而不是.字符.这是使用[^;]完成的,这意味着“任何不是分号的字符:
String removed = ampStr.replaceAll("&[^;]*;", "");
这性能优于&.* ?;对于不匹配的字符串,所以我强烈建议使用此版本,特别是因为并非所有HTML文件都包含& abc;令牌和&.*?;因此,版本可以拥有巨大的性能瓶颈.