如何从字符串中提取图像 url?
How to extract image url from a string?
我正在尝试从字符串内部提取图像 url。我正在使用模式和匹配器。我正在使用正则表达式来匹配相同的内容。每当我尝试调试代码时,matcher.matches() 和 matcher.find() 都会导致错误。
我附上图像 url 和正则表达式以及我的代码。
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();
您已经转义了字符串连接中的双引号
所以正则表达式引擎看到这个 (http(s?):/)(/[^/]+)+" + "\.(?:jpg|gif|png)
在 C++ 解析字符串之后。
你可以取消转义它"(http(s?):/)(/[^/]+)+" + "\.(?:jpg|gif|png)"
或者只是将它们组合在一起 "(http(s?):/)(/[^/]+)+\.(?:jpg|gif|png)"
如果表达式总是在末尾,我建议:
([^/?]+)(?=/?(?:$|\?))
您的正则表达式似乎有问题,\" + \"
应该来自您误认为是正则表达式的某些代码。该子模式需要一个引号,一个或多个 space,然后是 space,另一个双引号出现在扩展名之前。它匹配 http://www.medivision360.com/pharma/pages/articleImg/thumbnail/thumb3756d839adc5da3" ".jpg
.
另外,开头有两个多余的捕获组,不需要用到。
使用
String regex = "https?:/(?:/[^/]+)+\.(?:jpg|gif|png)";
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()
会找到部分匹配,即较大字符串中的匹配。
我正在尝试从字符串内部提取图像 url。我正在使用模式和匹配器。我正在使用正则表达式来匹配相同的内容。每当我尝试调试代码时,matcher.matches() 和 matcher.find() 都会导致错误。 我附上图像 url 和正则表达式以及我的代码。
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();
您已经转义了字符串连接中的双引号
所以正则表达式引擎看到这个 (http(s?):/)(/[^/]+)+" + "\.(?:jpg|gif|png)
在 C++ 解析字符串之后。
你可以取消转义它"(http(s?):/)(/[^/]+)+" + "\.(?:jpg|gif|png)"
或者只是将它们组合在一起 "(http(s?):/)(/[^/]+)+\.(?:jpg|gif|png)"
如果表达式总是在末尾,我建议:
([^/?]+)(?=/?(?:$|\?))
您的正则表达式似乎有问题,\" + \"
应该来自您误认为是正则表达式的某些代码。该子模式需要一个引号,一个或多个 space,然后是 space,另一个双引号出现在扩展名之前。它匹配 http://www.medivision360.com/pharma/pages/articleImg/thumbnail/thumb3756d839adc5da3" ".jpg
.
另外,开头有两个多余的捕获组,不需要用到。
使用
String regex = "https?:/(?:/[^/]+)+\.(?:jpg|gif|png)";
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()
会找到部分匹配,即较大字符串中的匹配。