2011-04-27 54 views
2

我試圖從一個網站使用Jsoup HTML解析器得到縮略圖的URL 我需要提取所有以60x60.jpg(或PNG )(所有的縮略圖URL以這個URL結尾)正則表達式在Java項目,而不是在Android項目

問題是我得到它在一個普通的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); 
      } 

     } 

    } 

,然後打印網址陣列..它的工作原理在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項目上工作..

Tnx。

+1

如果'IMG [來源$ = JPG]'應該是一個正則表達式,那麼它肯定不會做你希望它做的事。它與字符串「img」相匹配,後面緊跟一個字符,可以是's','r','c','$','=','','j','p'或'g '。 – 2011-04-27 08:56:50

+0

'('和')'試圖在em之前添加轉義字符 – Selvin 2011-04-27 08:57:24

+0

@Tim它是一個CSS選擇器,'〜'表示它是一個正則表達式選擇器 – 2011-04-27 09:01:31

回答

0

它看起來像Java正則表達式引擎和Android的Darvik引擎是有區別的。

我會簡化使用commaselector 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" /> 
+0

嘿好,它的工作,雖然我已經嘗試過耶利哥解析器,它的速度比o_O快2到3倍(來自URL) – 2011-05-01 09:22:04

1

我不知道JSoup或Android的正則表達式實現,但找到一個字符串開始img=60x60.jpg60x60.png結束將是一個正則表達式

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

也許你可以發佈文字的摘錄,你正試圖解析。可能正則表達式不是解決您的問題的方法。

+0

也許他正在搜索(60x60).png或(60x60).jpg和「('和')'in ...(60x60)...」是一個問題 – Selvin 2011-04-27 09:07:45

+0

@Selvin我在他們的網站上看到了這個例子[鏈接](http://jsoup.org/cookbook/extracting-data/selector-syntax) - img [src〜=(?i)\。(png | jpe?g)]所以我換了?我與60x60 – 2011-04-27 09:23:55

+2

「img [src〜=(?i)60x60 \\。(png | jpe?g)]」...(?i)只是意味着ignorecase – Selvin 2011-04-27 09:36:27

相關問題