我的正则表达式是
<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&fit=crop&w=70&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&fit=crop&w=70&h=70 70w\"/>";
Pattern pattern = Pattern.compile(IMG_PREFIX + "(.*?)" + IMG_SUFFIX);
Matcher matcher = pattern.matcher(line);
System.out.println(matcher.find());
}
}
编辑:生产代码正在使用此HTML source 而不是仅一行。
答案 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&fit=crop&w=70&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&fit=crop&w=70&h=70 70w