我尝试了很多方法来做到这一点。我对正则表达式完全不熟悉。 我想将所有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");
它只是不起作用。我花了很多时间来测试。
需要你的帮助。 非常感谢你。
答案 0 :(得分:5)
您无法在HTML / XML中可靠地使用regexp。您需要一个HTML解析器,例如容易混淆的JTidy(尽管它声称是一个HTML漂亮的打印机,它还为您提供了一个关于文档的DOM视图)
答案 1 :(得分: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);
}
}
答案 2 :(得分:0)
你在这里:
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);
它会返回你喜欢的内容。