2

我正在尝试使用 Jsoup HTML Parser 从网站获取缩略图 URL 我需要提取所有以 60x60.jpg(或 png)结尾的 URL(所有缩略图 URL 都以此 URL 结尾)

问题是我让它在一个普通的 Java 项目中工作,但在 Android 中它不起作用。(正则表达式问题)

此代码适用于 Java 项目:

List<String> urls = new ArrayList<String>();
Document doc = Jsoup.connect("http://example.com").get();
Elements pngs = doc.select("img[src~=(60x60).(png|jpg)]"); 
for (Element img : pngs) {
        String url = img.absUrl("src");
        {
            if (!urls.contains(url)) {
                urls.add(url);
            }
        }
    }

然后打印 urls 数组..它在 Java 中工作,而不是在 Android 项目中。

在 Android 中唯一有效的正则表达式只有这个

Elements pngs = doc.select("img[src$=.jpg]");

它在 Android 上运行良好.. 虽然我不需要所有以 .jpg 结尾的链接

我尝试使用

Elements pngs = doc.select("img[src~=(60x60)\\.(png|jpg)]");

仍然不好,即使在 .(png|jpg) 之前有一个斜线

那么正则表达式的问题是什么?它在Android中的工作方式不同还是什么?它不可能是解析器问题,因为它适用于普通的 Java 项目..

4

2 回答 2

1

我不知道 JSoup 或 Android 的正则表达式实现,但是一个正则表达式可以找到一个以 or 开头和结尾img=的字符串60x60.jpg60x60.png

\bimg=.*?60x60\.(jpg|png)\b

也许您可以发布您尝试解析的文本的摘录。可能正则表达式不是您问题的解决方案。

于 2011-04-27T08:59:25.547 回答
0

看起来 Java 正则表达式引擎和 Android 的 Darvik 引擎之间存在差异。

我会通过使用comma 选择器语法来简化,它适用or于多个选择器。

例如

Document doc = Jsoup.parse("<img src='foo-60x60.png'> <img src='bar-60x60.jpg'>");
Elements images = doc.select("img[src$=60x60.png], img[src$=60x60.jpg]");
System.out.println(images);

给出:

<img src="foo-60x60.png" />
<img src="bar-60x60.jpg" />
于 2011-04-29T04:50:28.343 回答