正则表达式,在排除纯文本时查找超链接

时间:2010-01-13 14:30:52

标签: c# regex

所以我希望从网站上抓取rapidshare.com链接。我有以下正则表达式来查找链接:

<a href=\"(http://rapidshare.com/files/(\\d+)/(.+)\\.(\\w{3,4}))\"

http://rapidshare.com/files/(\\d+)/(.+)\\.(\\w{3,4})

如何编写将排除<a href="...">标记中嵌入的文本的正则表达式。并且仅捕获>here</a>

中的文本

我还必须记住,并非所有链接都嵌入在href标记中。有些只是以纯文本显示。

基本上排除正则表达式中的模式有什么意义吗?

感谢。

3 个答案:

答案 0 :(得分:0)

这样怎么样,最后一部分会尝试匹配除' " >

之外的任何东西
http://rapidshare.com/files/(\d+)/([^'"> ]+)

答案 1 :(得分:0)

要捕获锚标记的内部文本,同时忽略标记的所有属性文本,您将使用该模式:

<a href="http://rapidshare.com/files/(\d+)/(.+)\.(\w{3,4})[^>]*>(.*?)</a>

[^>] *部分与标记中的所有其他内容匹配,直到开始标记结束。 (。*?)执行内部文本的非贪婪捕获。

如果您想捕获锚标记链接非锚标记链接,那么这些实际上是两个独立的问题。可能有一个正则表达式,但它会非常复杂。您最好只使用简单的正则表达式单独查找非锚标记链接:

[^'"]http://rapidshare.com/files/(\d+)/(.+)\.(\w{3,4})

答案 2 :(得分:-1)

如下:

/http:\/\/rapidshare.com\/files\/\d+\/[^<&\s]+\.\w{3,4}/

我摆脱了捕获组,因为我认为你只有它们在那里,因为你认为你可能需要它们以确保不同的分组工作,如果你真的想要解析它们,你可以重新添加它们。 / p>

您可以展开[^<&"\s],因为它只排除空格,<字符可能是标记的开头,&包含&nbsp;之类的内容1}}和其他HTML实体或",它们将是href=的结尾。但如果您愿意,可以排除任何non-valid URI character。这应该涵盖您的内联文本以及嵌入为href。

的文本