0

我有如下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";
4

3 回答 3

1

即使在特定情况下,正则表达式解决了您的 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&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 上找到许多提供相同建议的线程(包括这个 :)

于 2012-12-14T16:41:17.930 回答
1

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

于 2012-12-13T10:13:47.733 回答
0

如果您不是死心塌地使用正则表达式,最简单的解决方案是简单的字符串替换:

String customerText="TestBody <img src=\"test.action&attachmentId=3313&custId=456\" />";
String output = customerText.replace("attachmentId=3313", "attachmentId=3824");
于 2012-12-13T10:27:45.850 回答