Regex в Jsoup работает в проекте Java, а не в проекте Android - PullRequest
2 голосов
/ 27 апреля 2011

Я пытаюсь получить URL-адрес миниатюр с веб-сайта с помощью Jsoup HTML Parser. Мне нужно извлечь все URL-адреса, заканчивающиеся на 60x60.jpg (или png) (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)

Так в чем проблема в Regex?он работает по-другому в Android или что?это не может быть проблемой синтаксического анализатора, поскольку он работает в обычном Java-проекте ..

Ответы [ 2 ]

1 голос
/ 27 апреля 2011

Я не знаю реализацию регулярных выражений в JSoup или Android, но регулярное выражение, которое находит строку, начинающуюся с img= и заканчивающуюся 60x60.jpg или 60x60.png, будет

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

Возможно, вы могли бы опубликовать выдержку из текста, который вы пытаетесь разобрать. Возможно, регулярное выражение не является решением вашей проблемы.

0 голосов
/ 29 апреля 2011

Похоже, что есть разница между движком Java regex и 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" />
...