正则表达式用图像标签替换特定的字符串?

时间:2012-12-13 10:11:02

标签: java regex string

我有customerText,如下所示

 String customerText="TestBody <img src="test.action&attachmentId=3313&custId=456 /> Sometext @attachmentId=3313";

我想用attachmentId = 3824替换attachmentId = 3313(位于图片标签中)的所有出现。

所以上面输入的预期输出是

输出

 "TestBody <img src="test.action&attachmentId=3824&custId=456 /> Sometext @attachmentId=3313";

3 个答案:

答案 0 :(得分:1)

使用此正则表达式(?<=test\.action&attachmentId=)(\d+)(?=&|$|(/>)| )替换为3824

答案 1 :(得分:1)

即使在特定情况下,正则表达式解决了HTML操作的问题,正则表达式也不适合这项工作。 HTML不是常规语言,因此您最好不要将regex用于这些任务。使用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&param2=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上找到许多线程,提供相同的建议(包括this one :)

答案 2 :(得分:0)

如果您没有使用正则表达式,最简单的解决方案是简单的字符串替换:

String customerText="TestBody <img src=\"test.action&attachmentId=3313&custId=456\" />";
String output = customerText.replace("attachmentId=3313", "attachmentId=3824");