我正在尝试转换以下字符串:
<img src="image.jpg" ... />
这个
<img src="cid:image" ... />
需要维护“图像”字符串,但字符串本身可能不同。在 html 文档中有不同的 img 标签,每个标签都有不同的图像文件。
例如,如果我有:
<img src="mylogo.jpg" ... />
它应该转换为:
<img src="cid:mylogo" ... />
图像可以是 jpg
或 gif
。
感谢您的帮助,
最佳答案
注意:
除了 Regex
不是解析 HTML
的正确工具之外,如评论中所述,因为在 Java 中有许多解析 HTML 的工具
也许你可以看看 jsoup 例如,我会给你一个适合你使用正则表达式的需求的解决方案。
解决方案:
您可以使用以下正则表达式:
src=\"([\\:\\w\\s\\/]+)\\.\\w{3}\"
这是您需要的代码:
String html = "<img src=\"folder1/mylogo.jpg\" ... />";
Pattern pattern = Pattern.compile("src=\"([\\:\\w\\s\\/]+)\\.\\w{3}\"");
Matcher matcher = pattern.matcher(html);
while (matcher.find()) {
System.out.println("group 1: " + matcher.group(1));
//This line will give you the wanted output.
System.out.println("src=\"cid:"+matcher.group(1)+"\"");
System.out.println("Final Result: "+html.replaceAll("src=\"([\\:\\w\\s\\/]+)\\.\\w{3}\"", "src=\"cid:$1\""));
}
这是 a Working DEMO .
解释:
src=
按字面意思匹配字符src=
。\"
按字面意思匹配字符"
。([\\w\\/]+)
是一个捕获组来匹配所有想要的文本。\.
按字面意思匹配字符.
。\w{3,4}
匹配任何单词字符[a-zA-Z0-9_]
3 到 4 次以进行扩展,您可以如果您不愿意使用任何其他图像扩展,请使用jpg|gif
。\"
按字面意思匹配字符"
编辑:
期望的输出:
要用想要的结果替换此表达式,只需在 replaceAll()
方法上使用此正则表达式和您的 HTML,如下所示:
html.replaceAll("src=\"([\\:\\w\\s\\/]+)\\.\\w{3}\"", "src=\"cid:$1\"");
我们使用 $1
指向第一个捕获组。
关于java HTML正则表达式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32310226/