Java替换链接中的内容
我需要阅读网页的html,然后找到链接和图像,然后重命名链接和图像,我做了什么Java替换链接中的内容,java,regex,Java,Regex,我需要阅读网页的html,然后找到链接和图像,然后重命名链接和图像,我做了什么 reader = new BufferedReader(new InputStreamReader(socket.getInputStream(), 'UTF-8')); String line; while ((line = reader.readLine()) != null) { regex = "<a[^>]*href=(\"([^\"]*)\"|\'([^\']*)\'|([^
reader = new BufferedReader(new InputStreamReader(socket.getInputStream(), 'UTF-8'));
String line;
while ((line = reader.readLine()) != null) {
regex = "<a[^>]*href=(\"([^\"]*)\"|\'([^\']*)\'|([^\\s>]*))[^>]*>(.*?)</a>";
final Pattern pa = Pattern.compile(regex, Pattern.DOTALL);
final Matcher ma = pa.matcher(s);
if(ma.find()){
string newlink=path+"1-2.html";
//replace the link in href with newlink, how can i do this?
}
html.append(line).append("/r/n");
}
reader=new BufferedReader(新的InputStreamReader(socket.getInputStream(),'UTF-8');
弦线;
而((line=reader.readLine())!=null){
regex=“”;
最终模式pa=Pattern.compile(regex,Pattern.DOTALL);
最终匹配器ma=pa匹配器;
如果(ma.find()){
字符串newlink=path+“1-2.html”;
//将href中的链接替换为newlink,我如何才能做到这一点?
}
html.append(line.append(“/r/n”);
}
如何使用正则表达式解析HTML来完成注释部分可能既困难又不可靠。最好使用XPath和DOM操作进行类似操作。尽管如此,还是提到了替代方法:
- Matcher支持使用StringBuffer执行“全部替换”
- 匹配文本必须部分读取为替换文本,因此所有文本必须在
(2,3,…)中ma.组(1)
- DOTALL将允许
匹配换行符,而不需要使用
来分隔行尾readLine
- 每条线路可能有多个链接
- 您在示例代码中使用了一个
,而不是matcher
matcher(line)
StringBuffer html=new-StringBuffer();
reader=新的BufferedReader(新的InputStreamReader(socket.getInputStream(),'UTF-8');
弦线;
regex=“()”;
最终模式pa=Pattern.compile(regex);
而((line=reader.readLine())!=null){
最终匹配器ma=pa.匹配器(线);
while(ma.find()){
字符串newlink=path+“1-2.html”;
文学硕士(html,m.group(1)/*a href*/+…);
}
ma.appendTail(html);
html.append(line.append(“/r/n”);
}
您不希望(!!!!)用正则表达式解析HTML!改用一些HTML/XML解析器!这里有一些链接来证明我的观点:检查,甚至不!不要重新发明轮子。几乎在每种情况下,对于一个常见的问题都有一个解决方案,这也不例外
StringBuffer html = new StringBuffer();
reader = new BufferedReader(new InputStreamReader(socket.getInputStream(), 'UTF-8'));
String line;
regex = "(<a[^>]*href=)(\"([^\"]*)\"|\'([^\']*)\'|([^\\s>]*))[^>]*>(.*?)(</a>)";
final Pattern pa = Pattern.compile(regex);
while ((line = reader.readLine()) != null) {
final Matcher ma = pa.matcher(line);
while (ma.find()) {
string newlink=path+"1-2.html";
ma.appendReplacement(html, m.group(1) /* a href */ + ...);
}
ma.appendTail(html);
html.append(line).append("/r/n");
}