我有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";
答案 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¶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上找到许多线程,提供相同的建议(包括this one :)。
答案 2 :(得分:0)
如果您没有使用正则表达式,最简单的解决方案是简单的字符串替换:
String customerText="TestBody <img src=\"test.action&attachmentId=3313&custId=456\" />";
String output = customerText.replace("attachmentId=3313", "attachmentId=3824");