表达式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的innerHTML
innerHTML = 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";
}