即使在特定情况下,正则表达式解决了您的 HTML 操作问题,正则表达式也不是该工作的合适工具。HTML 不是常规语言,因此您最好不要将正则表达式用于这些任务。使用 HTML 解析器。您可以使用 Jsoup 轻松实现您的目标:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class MyJsoupExample2 {
public static void main(String args[]) {
String inputText = "<html><head></head><body><p><img src=\"test.action&attachmentId=3313&custId=456\" /></p>"
+ "<p>someText <img src=\"getCustomers.do?custCode=2&customerId=3340¶m2=456\"/></p></body></html>";
Document doc = Jsoup.parse(inputText);
Elements myImgs = doc.select("img[src*=attachmentId=3313");
for (Element element : myImgs) {
String src = element.attr("src");
element.attr("src", src.replace("attachmentId=3313", "attachmentId=3824"));
}
System.out.println(doc.toString());
}
}
该代码获取具有包含目标字符串img
的属性的节点列表:src
Elements myImgs = doc.select("img[src*=attachmentId=3313");
并遍历列表,src
用您想要的值替换属性的值。
我知道它不像单行解决方案那样吸引人,但相信我,它比使用正则表达式要好得多。您可以在 StackOverflow 上找到许多提供相同建议的线程(包括这个 :)。