Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java替换链接中的内容_Java_Regex - Fatal编程技术网

Java替换链接中的内容

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=(\"([^\"]*)\"|\'([^\']*)\'|([^

我需要阅读网页的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");  
}  
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执行“全部替换”
  • 匹配文本必须部分读取为替换文本,因此所有文本必须在
    ma.组(1)
    (2,3,…)中
  • 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");  
}