早上好。我意识到有很多关于替换和replaceAll()
的问题,但我已经看到了这一点。
我想要做的是解析一个字符串(其中包含有效的html到点)然后在我看到字符串中<p>
的第二个实例后,我想要删除以&amp;开头的所有内容。结束于;直到我看到下一个</p>
要做第二部分,我希望使用s.replaceAll("&*;","")
这不起作用,但希望它得到我的观点,我正在寻找替换任何以&amp;开头的东西以...结束;
答案 0 :(得分:8)
您应该将解析留给DOM解析器(see this question)。我几乎可以保证您必须这样做才能在<p>
代码中查找文字。
对于替换逻辑,String.replaceAll
使用正则表达式,可以进行所需的匹配。
&#34;通配符&#34;在您需要的正则表达式中是.*
表达式。使用您的示例:
String ampStr = "This &escape;String";
String removed = ampStr.replaceAll("&.*;", "");
System.out.println(removed);
这会输出This String
。这是因为.
表示任何字符,*
表示&#34;此字符为0或更多次。&#34;所以.*
基本上意味着&#34;任意数量的字符。&#34;然而,喂它:
"This &escape;String &anotherescape;Extended"
可能不会做你想要的,它会输出This Extended
。要解决此问题,请准确指定要查找的内容而不是.
字符。这是使用[^;]
完成的,这意味着&#34;任何不分号的字符:
String removed = ampStr.replaceAll("&[^;]*;", "");
对于不匹配的字符串,这比&.*?;
具有性能优势,因此我强烈建议您使用此版本,尤其是因为并非所有HTML文件都包含&abc;
令牌和&.*?;
版本因此可以拥有巨大的性能瓶颈。
答案 1 :(得分:1)
你想要的表达是:
s.replaceAll("&.*?;","");
但是你真的想以这种方式解析HTML吗?你可能最好使用XML解析器。