java - 正则表达式不从 html 标签中提取图像 url

标签 java regex matcher

我的正则表达式是

<source media="(min-width: 0px)" sizes="70px" data-srcset="(.*?)"/>

我正在测试我的正则表达式的文本是

<source media="(min-width: 0px)" sizes="70px" data-srcset="https://static2.therichestimages.com/wordpress/wp-content/uploads/2014/05/52f81afc8b39c.jpg?q=50&amp;fit=crop&amp;w=70&amp;h=70 70w"/>

它不会检测 data-srcset 属性内的 URL。

我的代码是

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Regex {

    private static final String IMG_PREFIX =
            "<source media=\"(min-width: 0px)\" sizes=\"70px\" data-srcset=\"";
    private static final String IMG_SUFFIX = "\"/>";

    public static void main(String[] args) {
        String line = "<source media=\"(min-width: 0px)\" sizes=\"70px\" data-srcset=\"https://static1.therichestimages.com/wordpress/wp-content/uploads/2012/06/Michael-Bloomberg.jpg?q=50&amp;fit=crop&amp;w=70&amp;h=70 70w\"/>";

        Pattern pattern = Pattern.compile(IMG_PREFIX + "(.*?)" + IMG_SUFFIX);
        Matcher matcher = pattern.matcher(line);

        System.out.println(matcher.find());

    }
}

编辑:生产代码正在使用这个 HTML source 而不仅仅是一行。

最佳答案

编辑

将您的模式更改为:

String regex = "<source media=\"\\(min-width: 0px\\)\" sizes=\"70px\" data-srcset=\"(.+)\"/>";

Pattern pattern = Pattern.compile(regex);

问题是您当前的正则表达式将括号作为“文本”的一部分,但它们没有正确转义,因为它们是正则表达式运算符。

具体

(min-width: 0px)

应该是:

\(min-width: 0px\)

在 Java 领域,因为你必须转义反斜杠:

\\(min-width: 0px\\)

示例:

public static void main(String[] args) {
    String line = "<source media=\"(min-width: 0px)\" sizes=\"70px\" data-srcset=\"https://static1.therichestimages.com/wordpress/wp-content/uploads/2012/06/Michael-Bloomberg.jpg?q=50&amp;fit=crop&amp;w=70&amp;h=70 70w\"/>\n";
    String regex = "<source media=\"\\(min-width: 0px\\)\" sizes=\"70px\" data-srcset=\"(.+)\"/>";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(line);
    while(matcher.find()) {
        System.out.println(matcher.group(1));
    }
}

我得到的输出:

https://static1.therichestimages.com/wordpress/wp-content/uploads/2012/06/Michael-Bloomberg.jpg?q=50&amp;fit=crop&amp;w=70&amp;h=70 70w

关于java - 正则表达式不从 html 标签中提取图像 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51641883/

相关文章:

javascript - 使用 `Regexp` - 如何从字符串数组创建列表?

javascript - 使用 js 正则表达式的字符串的第 N 个单词

java - 用于比较父类(super class)和子类的 Hamcrest 匹配器

scala - 如何在 Specs2 (Scala) 中显示自定义失败消息?

java - 选择 Java Spring 作为大型网站的可扩展服务器端框架

java - 终端中没有显示 junit 结果(通过或失败)

java - 按文件名中第二秒后的时间戳字符串对目录中的文件进行排序 -

regex - 如何使用vim/grep否定 future

java - 如何将 `any` 匹配器与对象参数一起使用

java - Windows 7 更新 KB4034664(2017 年 8 月)后多屏幕显示问题