Regex, чтобы взять URL - PullRequest
       2

Regex, чтобы взять URL

0 голосов
/ 06 октября 2011

У меня есть несколько веб-страниц для разбора, и есть ссылки вроде

<a href="/news/monde/0,,3204267-VU5WX0lEIDUy,00.html" class="S48">Jean-Paul II opéré "avec succès" (24/02/2005)</a>

<a href="javascript:VerifCookie('4','/news/economie/0,,3204461-VU5WX0lEIDUy,00.html',700,600,52);" class="S48">Que peut-il se passer si le pape est incapable d'assurer sa tâche ? (24/02/2005)</a>

Как вы можете видеть, у второго есть лучший JavaScript, и я хочу избавиться от него, а также быть совместимым с первым типом. Поэтому я написал регулярное выражение в Perl:

/<a href="[^\/]*?([^<']+?)[^"]*?" class="S48">([^<>]+?)<\/a>/

чтобы перехватить часть URL без содержимого javascript, а также часть заголовка. Но это регулярное выражение занимает только часть заголовка для меня, URL-адрес просто "/" или "j".

Есть предложения?

1 Ответ

2 голосов
/ 06 октября 2011

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

!<a\s*href\s*=\s*".*?(/.*\.html).*"\s+class="S48">([^<>]+?)</a>!i

, примененное к вашему входу, дает эти результаты для группы 1:

/news/monde/0,,3204267-VU5WX0lEIDUy,00.html
/news/economie/0,,3204461-VU5WX0lEIDUy,00.html

и это для группы 2:

Jean-Paul II opéré "avec succès" (24/02/2005)
Que peut-il se passer si le pape est incapable d'assurer sa tâche ? (24/02/2005)

Конечно, это работает с вашим конкретным вкладом. Я бы настоятельно рекомендовал избегать использования регулярных выражений для .xml, .html, .xsl и т. Д. Есть гораздо более совершенные инструменты для этой работы.

Также значительно короче версия:

/.*?(\/.*\.html).*?>([^<]+)/i

даст те же результаты.

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