我正在开展一个项目,要求我从open.spotify中删除一个专辑封面的图像链接
示例:http://open.spotify.com/track/296mPMQavmf1vvxYrUvLN8
在此示例中,我正在寻找此标记:<img id="cover-art" src="http://o.scdn.co/image/ff3874d40abf6e6e7763e39bdb2003cf503cba10">
作为正则表达式的输出,我希望如此:http://o.scdn.co/image/ff3874d40abf6e6e7763e39bdb2003cf503cba10
我一直试图让它工作一段时间,但我的解决方案总是超过2-3步。我还在学习正则表达式,无法理解如何解决这个问题。
任何建议表示赞赏。
答案 0 :(得分:2)
通常,您不应该使用regexps来解析HTML。尝试使用JSoup代替 - 它更实用。
获取jsoup JAR,将其添加到项目中并执行以下操作:
class SpotifyTask extends AsyncTask<String, Void, List<String>> {
@Override
protected List<String> doInBackground(String... params) {
ArrayList<String> res = new ArrayList<String>();
try {
Document doc = Jsoup.connect(params[0]).get();
// CSS-style selectors are your new best friend when scraping!
Elements coverArts = doc.select("img[id=cover-art]");
for (Element coverArt : coverArts) {
String url = coverArt.absUrl("src");
if (!TextUtils.isEmpty(url)) {
res.add(url);
}
}
} catch (IOException e) {
Log.w(TAG, "Error processing document", e);
}
return res;
}
@Override
protected void onPostExecute(List<String> result) {
Log.i(TAG, "Do something with your links: " + result);
}
}
在您的活动中以这样的方式启动它:
new SpotifyTask().execute("http://open.spotify.com/track/296mPMQavmf1vvxYrUvLN8");
答案 1 :(得分:1)
将整个页面读成一个字符串,然后这个正则表达式应该可以解决这个问题:
id="cover-art" src="([^"]+?)"
它固定在'id =“cover-art”src =“'并读取所有内容,直到下一个'”'作为匹配1.这应该只为您提供图像的URL。
根据您的首选匹配选项,您可以提供必要的锚标记,如下所示:
^.*id="cover-art" src="([^"]+?)".*$
这是必要的,因为Java中的一些匹配类总是希望匹配整个字符串,而第一个正则表达式不会这样做。