Java 从html字符串中提取所有图像

Java 从html字符串中提取所有图像,java,android,Java,Android,My web service返回一个html字符串,如下所示: {"content":"[caption id=\"attachment_7691\" align=\"aligncenter\" width=\"300\"]<img class=\"wp-image-7691 size-medium\" src=\"http:\/\/smsbaz.org\/wp-content\/uploads\/2015\/07\/funny-sms-exams-300x217.jpg\" alt=\

My web service返回一个html字符串,如下所示:

 {"content":"[caption id=\"attachment_7691\" align=\"aligncenter\" width=\"300\"]<img class=\"wp-image-7691 size-medium\" src=\"http:\/\/smsbaz.org\/wp-content\/uploads\/2015\/07\/funny-sms-exams-300x217.jpg\" alt=\"funny sms exams\" width=\"300\" height=\"217\" \/> funny sms exams[\/caption]\r\n<p style=\"text-align: center\">\u062f\u0631\u0633 \u062e\u0648\u0627\u0646\u062f\u0646 \u0686\u06cc\u0633\u062a\u061f\r\n.\r\n.\r\n.\r\n\u0628\u0647\u062a\u0631\u06cc\u0646 \u0642\u0631\u0635 \u062e\u0648...
{“content”:“[caption id=\”attachment\u 7691\”align=\“aligncenter\”width=\“300\”]趣味短信考试[\/caption]\r\n

\u062f\u0631\u0633\u062e\u0648\u0627\u0646\u062f\u0646\u0686\u06cc\u0633\u062a\u061f\r\n\r\n\r\n\n\r\n\n\n\u0628\u0647\u0647\u0624\u0624\u0624\u0624\u0624\u0624\u0624。。。

我想提取所有图像,如:


(来源:)

我正在使用此函数,但数组大小始终为0:

public ArrayList<String> getImagesOfFromHtmlString(String str){

    ArrayList<String> arr_images = new ArrayList<>();
    Pattern pattern = Pattern.compile("(https?://\\s*\\S+\\.(?:jpg|JPEG|png|gif))");
    Matcher m = pattern.matcher(str);


    while(m.find()){
        arr_images.add(m.group());
    }


    return arr_images ;

}
public ArrayList getimagesofromhtmlstring(String str){
ArrayList arr_images=新建ArrayList();
Pattern=Pattern.compile(((https?:/\\s*\\s+\\.(?:jpg | JPEG | png | gif)));
匹配器m=模式匹配器(str);
while(m.find()){
arr_images.add(m.group());
}
返回arr_图像;
}

我的错在哪里?

这有点危险,你也可能有相对的URL。无论如何,你的字符类似乎有问题,例如,
\s
代表空格。我还注意到你使用了
组()
在这种情况下你不需要捕获,它将与
组(1)相同
在您的代码中。这里有一个解决方案,虽然不完美,但足以提取:

"src=[\"'](https?://[^\"']+?\\.(?:jpg|JPEG|png|gif))['\"]"

工作不正常:Pattern Pattern=Pattern.compile(“src=[\”](https?:/[^\']+?\.(?:jpg | JPEG | png | gif))['\”];它的大小是:0有了这个,你需要分组(1),您可以打印输入的字符串吗?似乎很奇怪是的,粘贴字符串
str
,而不是程序,这很好。我认为您传入的值与您期望的值不同。只需执行System.out.println(str);在方法和System.out.println(arr_images.size())的开头;然后返回调试,并将其添加到问题中。