0

我需要阅读网页的html,然后找到链接和图像,然后重命名链接和图像,我做了什么

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");  
}  

我该怎么做评论部分

4

2 回答 2

0

尽管如此,还是提到了替代方案:

  • Matcher 支持使用 StringBuffer 进行“全部替换”。
  • 匹配的文本必须部分读取为替换文本,因此所有内容都必须在ma.group(1)(2, 3, ...) 中。
  • DOTALL 将允许.匹配换行符,而不需要使用readLinewhich 剥离行尾。
  • 每行可能有多个链接。
  • 您在示例代码中有一个matcher(s)而不是。matcher(line)

所以代码使用Matcher.appendReplacement 和 appendTail

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");  
}
于 2013-09-12T10:12:04.103 回答
0

使用正则表达式解析 HTML 可能很困难且不可靠。最好使用 XPath 和 DOM 操作来处理类似的事情。

于 2012-09-26T07:37:21.033 回答