Попытка разобрать ссылки в списке каталогов HTML с помощью регулярных выражений Java - PullRequest
2 голосов
/ 30 марта 2010

Хорошо, я знаю, что все скажут мне не использовать RegEx для разбора HTML, но я программирую на Android и не имею готового доступа к анализатору HTML (о котором я знаю). Кроме того, это сгенерированный сервером HTML, который должен быть более согласованным, чем сгенерированный пользователем HTML.

Регулярное выражение выглядит так:

Pattern patternMP3 = Pattern.compile(
        "<A HREF=\"[^\"]+.+\\.mp3</A>",
        Pattern.CASE_INSENSITIVE |
        Pattern.UNICODE_CASE);
Matcher matcherMP3 = patternMP3.matcher(HTML);
while (matcherMP3.find()) { ... }

Входной HTML-код находится в одной строке, что вызывает проблему. Когда HTML находится в отдельных строках, этот шаблон работает. Есть предложения?

Ответы [ 3 ]

1 голос
/ 30 марта 2010

регулярное выражение

"<A HREF=\"([^\"]+)\"[^>]*>([^<]+?)\\.mp3</A>"

должно соответствовать вашим ссылкам, иметь ссылку и имя файла в своих группах. Обратите внимание, что аргумент href не обязательно должен быть заключен в кавычки в html. (Или, если это необходимо, ни браузеры, ни разработчики не знают об этом =). )

0 голосов
/ 30 марта 2010

Для вашей информации, на Android вы можете "правильно" проанализировать HTML с помощью комбинации org.cyberneko.html.parsers.SAXParser, org.xml.sax. * И org.dom4j. *.

http://sourceforge.net/projects/nekohtml

http://www.saxproject.org

http://dom4j.sourceforge.net

0 голосов
/ 30 марта 2010

Вы не должны соответствовать '. +', Поскольку у вас уже есть [^ \ "] + (что лучше для вашей конкретной ситуации).

Попытка:

"<A HREF=\"[^\"]+\\.mp3\"</A>"

Кроме того, не забудьте двойную кавычку после mp3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...