使用正则表达式从HTML代码中获取URL

时间:2009-11-30 12:28:58

标签: c# asp.net regex asp.net-mvc url

考虑:

<div><a href="http://anirudhagupta.blogspot.com/">Anirudha Web blog</a></div>

获取http://anirudhagupta.blogspot.com/的正则表达式是什么 来自以下?

<div><a href="http://anirudhagupta.blogspot.com/">Anirudha Web blog</a></div>

如果你在C#中提出一些好的建议。我也喜欢jQuery来做这件事。

5 个答案:

答案 0 :(得分:1)

如果您想使用jQuery,您可以执行以下操作。

$('a').attr('href')

答案 1 :(得分:0)

又快又脏:

href="(.*?)"

好的,让我们使用另一个正则表达式来解析URL。这来自RFC 2396 - URI Generic Syntax: Parsing a URI Reference with a Regular Expression

^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?

当然,您可以在HTML代码中使用相对URL地址,您需要以其他方式解决这些问题。我建议您使用C#Uri Constructor (Uri, String)

答案 2 :(得分:0)

最简单的方法是使用以下正则表达式。

/href="([^"]+)"/

这将从第一个引号中获取所有字符,直到找到作为引号的字符。在大多数语言中,这是获取带引号的字符串的最快方法,它本身不能包含引号。引用应在属性中使用时进行编码。

UPDATE :用于解析网址的完整Perl程序如下所示:

use 5.010;

while (<>) {
    push @matches, m/href="([^"]+)"/gi;
    push @matches, m/href='([^']+)'/gi;
    push @matches, m/href=([^"'][^>\s]*)[>\s]+/gi;
    say for @matches;
}

它从stdin读取并打印所有URL。它负责三个可能的引用。与curl一起使用可查找网页中的所有网址:

curl url | perl urls.pl

答案 3 :(得分:0)

执行此操作的正确方法是将HTML加载到C#XML解析器中,然后使用XPath查询URL。这样您根本不必担心解析。

答案 4 :(得分:-2)

您不需要复杂的正则表达式或HTML解析器,因为您只想提取链接。这是一种通用的方法。

data="""
<html>
abcd ef ....
blah blah <div><a href="http://anirudhagupta.blogspot.com/">Anirudha Web blog</a></div>
blah  ...
<div><a href="http://mike.blogspot.com/">Mike's Web blog
</a></div>
end...
</html>
"""    
for item in data.split("</a>"):
    if "<a href" in item:
        start_of_href = item.index("<a href") # get where <a href=" is
        print item[start_of_href+len('<a href="'):] # print substring from <a href onwards. 

以上是Python代码,但您背后的想法可以适应您的C#语言。使用"</a>"作为分隔符拆分HTML字符串。浏览每个拆分字段,检查"href",然后在"href"之后获取子字符串。这将是你的链接。