Jsoup中的Regex适用于java项目,而不适用于Android项目

问题描述 投票:2回答:2

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

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

此代码适用于Java Project:

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 Project。

java android regex image jsoup
2个回答
0
投票

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

我会简化使用comma selector syntax,它将or应用于多个选择器。

EG

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" />

1
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.