正则表达式不会从html标记中提取图片网址

时间:2018-08-01 20:35:16

标签: 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 而不是仅一行。

1 个答案:

答案 0 :(得分:1)

编辑

将图案更改为:

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