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();

我用这个来原谅替换:

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

它只是行不通。我花了很多时间来测试。

并且需要你的帮助。非常感谢你。

4

3 回答 3

5

您不能可靠地将正则表达式与 HTML/XML 一起使用。您需要一个 HTML 解析器,例如名称混乱的JTidy(虽然它声称是 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 回答