【问题标题】:Regex in Jsoup works in java project, not in Android projectJsoup 中的正则表达式适用于 java 项目,而不适用于 Android 项目
【发布时间】:2011-04-27 08:51:42
【问题描述】:

我正在尝试使用 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 项目..

【问题讨论】:

  • 如果img[src$=.jpg] 应该是一个正则表达式,那么它肯定没有按照您的预期做。它匹配字符串img,后跟一个字符,可以是src$=.j、@9876543333@或@987654 @.
  • 不是'('和')'的问题尝试在em之前添加转义字符
  • @Tim 这是一个 CSS 选择器,~ 表示它是一个正则表达式选择器
  • @Tim Pietzcker 好的 tnx,我使用了这个“img[src$=60x60.jpg]”,但我怎样才能添加 png 呢?添加 (jpg|png) 不起作用。 tnx

标签: java android regex image jsoup


【解决方案1】:

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

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

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

【讨论】:

  • 也许他在“...(60x60)...”中搜索 (60x60).png 或 (60x60).jpg 和 '(' and ')' 是个问题
  • @Selvin 我在他们的网站上看到了这个例子link - img[src~=(?i)\.(png|jpe?g)] 所以我用 60x60 替换了 ?i
  • "img[src~=(?i)60x60\\.(png|jpe?g)]" ... (?i) 只是表示忽略大小写
【解决方案2】:

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

我会通过使用comma selector syntax 来简化,它将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" />

【讨论】:

  • 嘿,很好,它可以工作,虽然我已经尝试过 Jericho 解析器,它比 o_O 快 2 到 3 倍(来自 URL)
猜你喜欢
  • 1970-01-01
  • 2011-05-12
  • 2012-08-02
  • 1970-01-01
  • 2015-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-24
相关资源
最近更新 更多