早上好.我意识到有很多关于替换的问题,replaceAll()但我已经看到了这个.
我想要做的是解析一个字符串(其中包含有效的html到一个点)然后在我看到<p>字符串中的第二个实例之后我想要删除以&开头并以#结尾的所有内容; 直到我看到下一个</p>
为了做第二部分,我希望使用类似的东西 s.replaceAll("&*;","")
这不起作用,但希望它得到我的观点我想要替换任何以&开头的结尾;
您应该将解析留给DOM解析器(请参阅此问题).我几乎可以保证你必须这样做才能在<p>标签中找到文字.
对于替换逻辑,String.replaceAll使用正则表达式,可以进行所需的匹配.
您想要的正则表达式中的"通配符"是.*表达式.使用你的例子:
String ampStr = "This &escape;String";
String removed = ampStr.replaceAll("&.*;", "");
System.out.println(removed);
Run Code Online (Sandbox Code Playgroud)
这输出This String.这是因为它.表示任何字符,并且*表示"此字符0次或更多次".所以.*基本上意味着"任意数量的字符".然而,喂它:
"This &escape;String &anotherescape;Extended"
Run Code Online (Sandbox Code Playgroud)
可能不会做你想要的,它会输出This Extended.要解决此问题,请准确指定要查找的内容而不是.字符.这是使用完成的[^;],这意味着"任何不是分号的字符:
String removed = ampStr.replaceAll("&[^;]*;", "");
Run Code Online (Sandbox Code Playgroud)
&.*?;与非匹配字符串相比,这具有性能优势,因此我强烈建议使用此版本,特别是因为并非所有HTML文件都包含&abc;令牌,因此&.*?;版本可能具有巨大的性能瓶颈.
| 归档时间: |
|
| 查看次数: |
9912 次 |
| 最近记录: |