2017-11-27 5 views
-2

すべてのアンカータグ内の "href"の内容を置き換えました。 HTMLボディ全体がStringオブジェクト内で受信されます。Stringオブジェクト内にあるHTMLタグ内の内容を置換してください

タグアンカーが複数発生しています。私はすべてのアンカータグの中で "href"の値を置き換えています。

Parent.java { 
    ... 
    String htmlBody; 
} 

例:

htmlBody=" 
<HTML> 
<head>...</head> 
<body> 
    <table> 
     <tr><td> 
      <table> 
      <tr><td> 
       <a href="https://www.test.com/shop/s111/product/pro1"><img  src="..."></a> 
      </td></tr> 
      <tr><td> 
       <a href="https://www.test.com/shop/os222/product/pro2"><img src="..."></a> 
      </td></tr> 
     </table> 
    ... 
</body> 
</HTML>"; 

アンカータグ内の各hrefの値が若干異なるのでご注意ください。

これをJavaで実現するための最良の方法を知りたい。

+0

JSoupのようなHTMLパーサを使用してください。 –

+0

はい、または単に正規表現 –

答えて

0

このソリューションでは、入力されたHTMLの妥当性をチェックし、URLを二重引用符で囲まれていると仮定していません:

StringBuffer buf = new StringBuffer(); 
    Pattern pattern = Pattern.compile("<a href=\"([^\"]*)\">"); 
    Matcher matcher = pattern.matcher(htmlBody); 
    while (matcher.find()) { 
     String url = replaceUrl(matcher.group(1)); 
     matcher.appendReplacement(buf, "<a href=\"" + url + "\">"); 
     System.out.println(matcher.group(0)); 
    } 
    matcher.appendTail(buf); 
    System.out.println(buf.toString()); 
+0

ありがとうございます。それは期待どおりに働いた。 – rupesh

+0

これは脆いです。 'href ='の前後に属性がある場合、またはHTMLが2行にまたがっている場合は、改行します。 REGEXを使用しないでください。それは仕事のための間違ったツールです。あなたは脳手術のためにチェーンソーを使用しません。[必要な読書](https://stackoverflow.com/a/1732454/18157) –

+0

@ジムガリソン、またはむしろツリーを下ろすメス;) –

関連する問題