1

これを行うために多くの方法を試しました。そして、私は正規表現にまったく慣れていません。すべての img src リンクを他のリンクに置き換えたい。

私のhtmlファイルは次のようなものです:

<img src="01"></img><img src="02"></img><img src="03"></img>

または次のようになります。

<  img src  =  "01"></img><    img src="02"><    img src = "03"></img>

スペースがあるか、" </img>"がないだけの可能性があります

そして、私はそれらがこのようになりたいです:

<div><p><DIV class="a"><img src="01"></img></p></div><div><p><DIV class="a"><img src="02"></img></p></div><div><p><DIV class="a"><img src="03"></img></p></div>

これを使用して、img src リンクを取得します。

            Pattern p = null;
            Matcher m = null;
            p = Pattern.compile("<img[^>]*src\\s*=\\s*\"([^\"]*)");
            m = p.matcher(mystr);
            while (m.find()) {
                imgIDList.add(m.group(1));
            }

そして、置換する str リストを作成しました: ArrayList imgList4Replace = new ArrayList();

そして、私はこれを使って replace を言い訳します:

                mystr.replace(("<img[^>]*src\\s*=\\s*\""+imgListReplaceOriginal.get(nIndex)+"([^\"]*)"), imgList4Replace.get(nIndex)+"$2");

それはうまくいきません。私はテストに多くの時間を費やしました。

そして、あなたの助けが必要です。どうもありがとうございました。

4

3 に答える 3

5

HTML/XML で正規表現を確実に使用することはできません。紛らわしい名前のJTidyなどの HTML パーサーが必要です(HTML プリティプリンターであると主張していますが、ドキュメントの DOM ビューも提供します)。

于 2012-09-13T08:28:53.837 に答える
3

コードは次のとおりです。

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class ImgTest {
    public static void main(String[] args) {

            String s = "This is a sample<img src=\"test.html\" /> text";
            Pattern p = Pattern.compile("[<](/)?img[^>]*[>]");
            Matcher m = p.matcher(s);
            if (m.find()) {
              String src = m.group();
              System.out.println(src);
            }
            s = s.replaceAll("[<](/)?img[^>]*[>]", "");
            System.out.println(s);
    }
}
于 2012-10-16T09:29:47.887 に答える
1

はい、どうぞ:

private static String replaceSrcs(String str, List<String> srcs) {
    Pattern p = Pattern.compile("(<\\s*img\\s*src\\s*=\\s*\").*?(\"\\s*>)");
    Matcher m = p.matcher(str);
    StringBuffer sb = new StringBuffer();
    int i = 0;
    while (m.find()) {
        m.appendReplacement(sb, "$1" + srcs.get(i++) + "$2");
    }
    m.appendTail(sb);
    return sb.toString();
}

今、あなたはそれを呼び出す必要があります:

replaceSrcs(mystr, imgList4Replace);

そして、それはあなたが好きなものを返します。

于 2012-09-13T09:51:24.923 に答える