正则表达式解析超链接和描述

时间:2008-08-25 16:05:30

标签: html regex

C#:什么是解析超链接及其描述的优秀正则表达式?

请考虑不区分大小写,空白区域以及在HREF标记周围使用单引号(而不是双引号)。

另请考虑获取<a>标记中包含其他标记的超链接,例如<b><i>

6 个答案:

答案 0 :(得分:6)

只要没有嵌套标签(并且没有换行符),以下变体就可以正常工作:

<a\s+href=(?:"([^"]+)"|'([^']+)').*?>(.*?)</a>

一旦嵌套标签发挥作用,正则表达式就不适合解析。但是,您仍然可以通过应用现代解释器的更高级功能(取决于您的正则表达式计算机)来使用它们。例如。 .NET正则表达式使用堆栈;我发现了这个:

(?:<a.*?href=[""'](?<url>.*?)[""'].*?>)(?<name>(?><a[^<]*>(?<DEPTH>)|</a>(?<-DEPTH>)|.)+)(?(DEPTH)(?!))(?:</a>) 

来源:http://weblogs.asp.net/scottcate/archive/2004/12/13/281955.aspx

答案 1 :(得分:3)

请参阅StackOverflow: Regular expression for parsing links from a webpage?

中的此示例

使用The HTML Agility Pack,你可以解析html,并使用HTML的语义提取细节,而不是破坏的正则表达式。

答案 2 :(得分:1)

I found this但显然these guys遇到了一些问题。

编辑:(它有效!)
我现在已经完成了自己的测试,发现它有效,我不知道C#所以我不能给你一个C#的答案,但我知道PHP,这里是我在运行它时得到的匹配数组:

<a href="pages/index.php" title="the title">Text</a>

array(3) { [0]=> string(52) "Text" [1]=> string(15) "pages/index.php" [2]=> string(4) "Text" } 

答案 3 :(得分:1)

I have a regex处理大多数情况,但我相信它在多行评论中与HTML匹配。

它是使用.NET语法编写的,但应该很容易翻译。

答案 4 :(得分:0)

现在我已经把这个片段扔到那里了。这是一个不太贪婪的版本。如果输入有多个超链接,原始将无法工作。下面的代码将允许您循环遍历所有超链接:

static Regex rHref = new Regex(@"<a.*?href=[""'](?<url>[^""^']+[.]*?)[""'].*?>(?<keywords>[^<]+[.]*?)</a>", RegexOptions.IgnoreCase | RegexOptions.Compiled);
public void ParseHyperlinks(string html)
{
   MatchCollection mcHref = rHref.Matches(html);

   foreach (Match m in mcHref)
      AddKeywordLink(m.Groups["keywords"].Value, m.Groups["url"].Value);
}

答案 5 :(得分:0)

这是一个与平衡标签匹配的正则表达式。

(??: “” '[ “”'] * GT)

(?(大于()|(小于?-depth&GT;)|)+。)((深度)(? !))(?:)