正则表达式采取网址

时间:2011-10-06 13:57:21

标签: html regex 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>/

捕获没有javascript内容的URL部分以及标题部分。但是这个正则表达式只为我提供了标题部分,所采用的网址只是“/”或“j”。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

这个正则表达式:

!<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

会产生相同的结果。