Регулярное выражение для приема URL-адресов

#html #regex #perl

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

Вопрос:

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

 <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. Вы не должны использовать регулярное выражение для этой задачи. Там, конечно, есть синтаксический анализатор HTML для perl. (Посмотрите на perl.active-venture.com/lib/HTML/Parser.html )

2. Вы хотите поймать /news/monde/0,,3204267-VU5WX0lEIDUy,00.html и /новости/экономика/0,,3204461-VU5WX0lEIDUy,00.html ?

3. @FailedDev Да, что часть URL, которую я хочу

4. @Jens спасибо, я попробую, но я все еще хочу выяснить, почему регулярное выражение не работает

5. Ссылка на документацию в комментариях выше устарела на много лет. Лучше: p3rl.org/HTML::Parser

Ответ №1:

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

 !<as*hrefs*=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
  

Приведет к тем же результатам.