【问题标题】:java HTML regexp issuejava HTML正则表达式问题
【发布时间】:2015-11-25 10:16:00
【问题描述】:

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

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

这个

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

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

例如,如果我有:

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

它应该转换为:

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

图片可以是jpggif

感谢您的帮助,

【问题讨论】:

  • 将其读入 XML 解析器,修改并输出结果。你可以使用类似JSoup
  • Regex 不是用于 HTML 解析的正确工具。除此之外,标题谈到一个问题,你有哪个问题?你能把你的代码贴出来吗?
  • 问题是没有解决这个问题的代码:)

标签: java html regex


【解决方案1】:

注意:

除了Regex不是解析HTML的正确工具,如cmets中提到的,因为Java中有很多解析HTML的工具,也许你可以看看@比如987654321@,我会给你一个适合你使用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
  • \" 匹配字符 " 字面意思

编辑:

期望的输出:

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

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

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

【讨论】:

  • 没有第一个和最后一个斜线,java不是javascript
  • @WashingtonGuedes 我们只需要将 \w+ 更改为 [\\w\\/]+
  • 我们会将 \s 添加到列表中。
  • 我使用([\\:\\w\\s\\/]+)对其进行了编辑以包含所有可能性。
  • @chsdk: 使用你的代码我得到了 'src="cid:folder1/mylogo"' 但我需要整个部分 ' '
猜你喜欢
  • 2017-03-27
  • 1970-01-01
  • 1970-01-01
  • 2011-09-04
  • 2011-04-25
  • 1970-01-01
相关资源
最近更新 更多