在未知索引位置搜索特定字符之间的子字符串

3

我可以给你一个字符串示例:

<div class="photo-box biz-photo-box pb-60s">
    <a href="/biz/the-kerry-piper-willowbrook">
        <img class="photo-img" alt="" height="60" src="http://s3-media3.ak.yelpcdn.com/bphoto/rCz-uF_qwqyb5Nnq74JeVQ/60s.jpg" width="60">
    </a>

如何获取URL

http://s3-media3.ak.yelpcdn.com/bphoto/rCz-uF_qwqyb5Nnq74JeVQ/60s.jpg 

如何从这个字符串中获取URL?

我考虑过使用string.indexOf(),但URL前后的字符数可能会有所变化,因此我不知道子字符串从哪个索引开始,这可能会很麻烦。 有更好的方法吗?


2
你需要使用 jSoup HTML 解析器。 - KV Prajapati
嗯...你不一定非要使用jSoup,但这可能是个好主意。如果你只是从一个字符串中提取一个url,那么使用正则表达式可能并不是一个坏主意。 - Michael
2个回答

4
使用 Jsoup 来从 URL文件字符串 中解析/抓取 HTML,并使用其类似 jQuery 的选择器语法。
String htmlStr="<div class=\"photo-box biz-photo-box pb-60s\">"
                      + "<a href=\"/biz/the-kerry-piper-willowbrook\">"
                      + "<img class=\"photo-img\" alt=\"\" height=\"60\" src=\"http://s3-media3.ak.yelpcdn.com/bphoto/rCz-uF_qwqyb5Nnq74JeVQ/60s.jpg\" width=\"60\">"
                      + "</a>";

org.jsoup.nodes.Document doc=org.jsoup.Jsoup.parse(htmlStr);
String src=doc.select("img").attr("src");
System.out.println(src);

2
如果您不想使用HTML解析器,可以构造一个正则表达式,并使用正则表达式包来匹配您所需的数据。
类似这样的东西,
Pattern pattern = Pattern.compile("<img.*?src=\"([^\"]+)\"",Pattern.CASE_INSENSITIVE);
Matcher m = pattern.matcher(data);
while(m.find()) {
    srcUrl = m.group(1));
} 

没问题。在不同的情况下,拥有几个技巧总是很好的。如果您正在进行许多不同的HTML提取,则@AVD的jSoup答案是正确的选择。对于单个匹配或两个匹配,我喜欢避免使用额外库的开销。 - iagreen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接