C#使用正则表达式解析超链接文本和地址

来源:互联网 发布:求矩阵的奇异值分解 编辑:程序博客网 时间:2024/04/28 20:30

表达式1,获取href地址:

(?is)<a[^>]*?href=(['""\s]?)(?<href>[^'""\s]*)\1[^>]*?>


 

c#代码:

Regex reg = new Regex(@"(?is)<a[^>]*?href=(['""\s]?)(?<href>[^'""\s]*)\1[^>]*?>");             MatchCollection match = reg.Matches(textBox1.Text);             foreach (Match m in match)             {                    textBox2.Text += m.Groups["href"].Value;            } 


表达式2,可获取文本和地址:

<a.*?(?: |\t|\r|\n)?href=[\'"]?(.+?)[\'"]?(?:(?: |\t|\r|\n)+.*?)?>(.+?)<\/a.*?>


 

有时<a></a>中间还有<img>,可以参考以下代码去除:

string html = 要匹配的字符串;Regex reg = new Regex(@"<a\s*[^>]*>([\s\S]+?)</a>", RegexOptions.IgnoreCase);Match m = reg.Match(html);while(m.IsSuccess){string innerHTML = m.Result("$1");// 得到正则的括号里的内容,就是a的innerHTMLinnerHTML = Regex.Replace(innerHTML, @"<[^>]*>", "",RegexOptions.IgnoreCase);// 替换掉里面的html,只保留文字 m = m.NextResult;// 循环匹配html里的下一个结果}


另外还搜到一个表达式,测试了一下好像没用,留着参考:

Regex reg = new Regex(@"(?is)<a(?:(?!href=).)*href=(['""]?)(?<url>[^""\s>]*)\1[^>]*>(?<text>(?:(?!</?a\b).)*)</a>");MatchCollection mc = reg.Matches(str);foreach (Match m in mc){  TextBox1.Text += m.Groups["url"].Value + "\n";     richTextBox2.Text += m.Groups["text"].Value + "\n";    }