我正在尝试从字符串内部提取图像URL。我正在使用Pattern和Matcher。我使用正则表达式来匹配相同的。每当我尝试调试代码时,matcher.matches()和matcher.find()都会导致错误。 我附加图像网址和正则表达式以及我的代码。
Pattern pattern_name;
Matcher matcher_name;
String regex = "(http(s?):/)(/[^/]+)+\" + \"\\.(?:jpg|gif|png)";
String url = "http://www.medivision360.com/pharma/pages/articleImg/thumbnail/thumb3756d839adc5da3.jpg";
pattern_name = Pattern.compile(regex);
matcher_name = pattern_name.matcher(url);
matcher_name.matches();
matcher_name.find();
答案 0 :(得分:0)
你已经在字符串连接中转义了双引号
所以正则表达式引擎会看到(http(s?):/)(/[^/]+)+" + "\.(?:jpg|gif|png)
在c ++解析字符串之后。
你可以取消它"(http(s?):/)(/[^/]+)+" + "\\.(?:jpg|gif|png)"
或者只是将它们加在一起"(http(s?):/)(/[^/]+)+\\.(?:jpg|gif|png)"
答案 1 :(得分:0)
如果表达总是在最后,我建议:
([^/?]+)(?=/?(?:$|\?))
答案 2 :(得分:0)
你似乎对正则表达式有一些问题,\" + \"
应该来自你误认为正则表达式的一些代码。该子模式需要一个引号,一个或多个空格,然后一个空格,以及另一个双引号出现在扩展名之前。它匹配http://www.medivision360.com/pharma/pages/articleImg/thumbnail/thumb3756d839adc5da3" ".jpg
之类的内容。
此外,开头有两个冗余捕获组,您无需使用它们。
使用
String regex = "https?:/(?:/[^/]+)+\\.(?:jpg|gif|png)";
请参阅this demo
String rx = "https?:/(?:/[^/]+)+\\.(?:jpg|gif|png)";
String url = "http://www.medivision360.com/pharma/pages/articleImg/thumbnail/thumb3756d839adc5da3.jpg";
Pattern pat = Pattern.compile(rx);
Matcher matcher = pat.matcher(url);
if (matcher.matches()) {
System.out.println(matcher.group());
}
请注意,Matcher#matches()
需要完整的字符串匹配,而Matcher#find()
会找到部分匹配,匹配更大的字符串。