java HTML regexp问题

时间:2015-08-31 11:31:42

标签: java html regex

我正在尝试转换以下字符串:

<img src="image.jpg" ... />

这一个

<img src="cid:image" ... />

&#34;图像&#34;需要维护字符串,但字符串本身可能不同。在html文档中有不同的img标签,每个标签都有不同的图像文件。

所以,例如,如果我有:

<img src="mylogo.jpg" ... />

它应该转换为:

<img src="cid:mylogo" ... />

图片可以是jpggif

感谢您的帮助,

1 个答案:

答案 0 :(得分:0)

<强> 注意:

除了Regex不是解析HTML的正确工具之外,正如评论中所提到的那样,因为在Java中有许多用于解析HTML的工具,也许你可以采用例如,看看 jsoup ,我会为您提供一个符合您使用Regex的解决方案。

<强>解决方案:

您可以使用以下Regex:

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。< / em>的
  • \"字面匹配字符"

编辑:

期望的输出:

要将此表达式替换为所需结果,只需在replaceAll()方法上使用此正则表达式,如下所示:

html.replaceAll("src=\"([\\:\\w\\s\\/]+)\\.\\w{3}\"", "src=\"cid:$1\"");

我们使用$1指向第一个捕获组。