0

Webページの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

Using regex for parsing HTML can be difficult and unreliable. It's better to use XPath and DOM manipulation for things like that.

于 2012-09-26T07:37:21.033 に答える
0

それにもかかわらず、代替案が言及されました:

  • Matcher は、StringBuffer を使用した「すべて置換」をサポートしています。
  • 一致したテキストは、置換テキストとして部分的に再読み込みする必要があるため、すべてがma.group(1)(2, 3, ...) にある必要があります。
  • DOTALL は.改行文字と一致させますがreadLine、行末をストリップするものを使用する必要はありません。
  • 1 行に複数のリンクがある場合があります。
  • コード例では、matcher(s)代わりにaがありました。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 に答える