2010-11-01 95 views
0

我想创建一个正则表达式来解析HTML页面中的文档链接(pdf,ppt,xls,doc)。我有正则表达式非贪婪,但我看到的问题如下:正则表达式匹配href而不通过结束标记

  • href到HTML页面出现在同一行上的文档的href之前。

在这种情况下,正则表达式从HTML页面的href的开始处到下一个href中的文档文件扩展名的末尾处在同一行上匹配。

下面是我使用正则表达式:

/href="\/cms\/(.*?\.(pdf|ppt|xls|doc))(\?.*?)?"/i 

下面是一些示例HTML解析:

<a href="/cms/medical/plans_overview.html">Medical</a></div><a href="/cms/docs/mydoc.pdf"> 

目前这款从第一HREF到最后PDF格式相匹配。似乎我需要能够指定我想要的匹配,只要它没有通过表达式中的关闭“>”,但一直没能弄清楚。

希望得到任何帮助......

+1

出于好奇,你为什么选择正则表达式来执行这个任务? – 2010-11-01 19:59:15

+0

它似乎是动态解析大量页面的最佳方法,而无需编写和维护大量的字符串解析逻辑。当然,正则表达式的问题在于如果你没有很多经验,你可以花几个小时看看如何让正则表达式工作 – 2010-11-02 00:02:06

+0

你可能想用XPath查询来代替RegEx;技术上的html标记不是_regular_语言,所以如果使用_regular_表达式来处理html或xml,它不会像预期的那样工作。 – 2010-11-03 03:38:33

回答

1

由于您的属性值包装到双引号,你可以排除他们被匹配:

/href="\/cms\/([^"]*?\.(pdf|ppt|xls|doc))(\?[^"]*?)?"/i 

你甚至可以更窄的有效字符用[^<"]

+0

这真棒,一旦你看到它,似乎非常明显。谢谢。 – 2010-11-01 23:52:49

相关问题