求一正则表达式匹配a标签

时间:2021-04-07 05:38:58
例如  <a href=" http://xxoo.html">a业务员</a>
我想提取出 这个URL+“a业务员”这样的东西,正则怎么写?能实现么
我有试过这样写,但是效果不佳


strZhengZe = "href=\"(?<url>.*?)\">([^<>]+)<";
Regex reg = new Regex(strZhengZe, RegexOptions.IgnoreCase);
MatchCollection mc = reg.Matches(strSource);
if (mc.Count > 0)
{
    string[] strHref = new string[mc.Count];
    int i = 0;
    foreach (Match m in mc)
    {
        strHref[i] = m.Groups[1].Value;
        strJieGuo = strJieGuo + strHref[i] + "\n";
        i++;
    }
}

这个 href=\"(?<url>.*?)\">([^<>]+)<  匹配出来只有 “a业务员”
而正则我单独用  href=\"(?<url>.*?)\" 就可以匹配出前面的url
请问一下我要怎么写才可以把 http://xxoo.html">a业务员  一起匹配出来?
小弟拜谢了

12 个解决方案

#1


最简单的办法,分别匹配,然后再加在一起就可以了阿。

a="href=\"(?<url>.*?)\">([^<>]+)<";

b=href=\"(?<url>.*?)\"

c=b+a

#2


try...

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

#3


<a href=" http://xxoo.html">a业务员</a>
-------------------------------------------
<a href=(['"]?)(?<url>[^ "']+)\1>(?<text>.*?)</a>


strZhengZe = "href=\"(?<url>.*?)\">([^<>]+)<";
Regex reg = new Regex(strZhengZe, RegexOptions.IgnoreCase);
MatchCollection mc = reg.Matches(strSource);
if (mc.Count > 0)
{
    string[] strHref = new string[mc.Count];
    int i = 0;
    foreach (Match m in mc)
    {
        strHref[i] = "Url="+m.Groups["url"].Value+"\tText="+m.Groups["text"].Value;
        strJieGuo = strJieGuo + strHref[i] + "\n";
        i++;
    }
}

#4


楼主的例子中href="后有一个空格,正常的URL中一般是不会出现空格的,需要确认一下是否真的存在

如果存在,那就不能要这么高的灵活性了,只匹配href=后“"”的正则

            string test = "<a href=\" http://xxoo.html\">a业务员</a>";
            Regex reg = new Regex(@"(?is)<a[^>]*?href=""(?<url>[^""]+)""[^>]*>(?<text>.+?)</a>");
            MatchCollection mc = reg.Matches(test);
            foreach (Match m in mc)
            {
                richTextBox2.Text += m.Groups["url"].Value + "\n";
                richTextBox2.Text += m.Groups["text"].Value + "\n";
            }

#5


重复了……
刚连沙发都没有……

#6


引用 3 楼 wuyazhe 的回复:
<a href=" http://xxoo.html">a业务员</a>
-------------------------------------------
<a href=(['"]?)(?<url>[^ "']+)\1>(?<text>.*?)</a>


C# code

strZhengZe = "href=\"(?<url>.*?)\">([^<>]+)<";
Reg……


大哥你这个匹配出来text全部为空

#7


示例,你试试吧:

示例:
<a href="html/1.html">第一个页面</a>

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

2.
MatchCollection mc= Regex.Matches(str, @" <a[^> ]*href=([ ' " "]?)(? <url> [^ ' " "> \s]*)\1?[^> ]*> (? <text> [^ <]

*) </a> ", RegexOptions.IgnoreCase);  
foreach (Match m in mc)  
{  
  Response.Write(m.Groups[ "url "].Value);  
  Response.Write(m.Groups[ "text "].Value);  


3.
MatchCollection mc = Regex.Matches(@"<a href=""html/1.html"">第一个页面</a>",
    @"(?isn)<a.+?href=""(?<url>[^""]+)[^>]+>(?<text>.+?)</a>");
foreach (Match m in mc)
{
    MessageBox.Show(m.Groups["url"].Value + Environment.NewLine +
        m.Groups["text"].Value);
}

4.
MatchCollection mc = Regex.Matches(@"<a href=""html/1.html"">第一个页面</a>",
  @"(?isn)<a.+?href=""(?<url>[^""]+)[^>]+>(?<text>.+?)</a>");
foreach (Match m in mc)
{
  MessageBox.Show(m.Groups["url"].Value + Environment.NewLine +
  m.Groups["text"].Value);
}

#8


引用 2 楼 lxcnn 的回复:
try...


C# code
            string test = "<a href=\"http://xxoo.html\">a业务员</a>";
            Regex reg = new Regex(@"(?is)<a[^>]*?href=(['""]?)(?<url>[^'""\s>]+)\1[^>]*>(?<text>(?:(?!</?a\b).)……

果然是高手,完全正确,非常感谢,这就结贴

#9


复制错了。。。。
<a href=(['"]?)\s*(?<url>[^ "']+)\1>(?<text>[\s\S]*?)</a>

#10


谢谢各位大哥哈
第一个最先整出正确答案,所以分大部分给他了,由于我这里上csdn非常卡,我接贴的的时候才看到楼上大哥的回复。。。实在不好意思。。。

#11


Mark.

#12


很合理。 ^_^ 客客师傅厉害。

#1


最简单的办法,分别匹配,然后再加在一起就可以了阿。

a="href=\"(?<url>.*?)\">([^<>]+)<";

b=href=\"(?<url>.*?)\"

c=b+a

#2


try...

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

#3


<a href=" http://xxoo.html">a业务员</a>
-------------------------------------------
<a href=(['"]?)(?<url>[^ "']+)\1>(?<text>.*?)</a>


strZhengZe = "href=\"(?<url>.*?)\">([^<>]+)<";
Regex reg = new Regex(strZhengZe, RegexOptions.IgnoreCase);
MatchCollection mc = reg.Matches(strSource);
if (mc.Count > 0)
{
    string[] strHref = new string[mc.Count];
    int i = 0;
    foreach (Match m in mc)
    {
        strHref[i] = "Url="+m.Groups["url"].Value+"\tText="+m.Groups["text"].Value;
        strJieGuo = strJieGuo + strHref[i] + "\n";
        i++;
    }
}

#4


楼主的例子中href="后有一个空格,正常的URL中一般是不会出现空格的,需要确认一下是否真的存在

如果存在,那就不能要这么高的灵活性了,只匹配href=后“"”的正则

            string test = "<a href=\" http://xxoo.html\">a业务员</a>";
            Regex reg = new Regex(@"(?is)<a[^>]*?href=""(?<url>[^""]+)""[^>]*>(?<text>.+?)</a>");
            MatchCollection mc = reg.Matches(test);
            foreach (Match m in mc)
            {
                richTextBox2.Text += m.Groups["url"].Value + "\n";
                richTextBox2.Text += m.Groups["text"].Value + "\n";
            }

#5


重复了……
刚连沙发都没有……

#6


引用 3 楼 wuyazhe 的回复:
<a href=" http://xxoo.html">a业务员</a>
-------------------------------------------
<a href=(['"]?)(?<url>[^ "']+)\1>(?<text>.*?)</a>


C# code

strZhengZe = "href=\"(?<url>.*?)\">([^<>]+)<";
Reg……


大哥你这个匹配出来text全部为空

#7


示例,你试试吧:

示例:
<a href="html/1.html">第一个页面</a>

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

2.
MatchCollection mc= Regex.Matches(str, @" <a[^> ]*href=([ ' " "]?)(? <url> [^ ' " "> \s]*)\1?[^> ]*> (? <text> [^ <]

*) </a> ", RegexOptions.IgnoreCase);  
foreach (Match m in mc)  
{  
  Response.Write(m.Groups[ "url "].Value);  
  Response.Write(m.Groups[ "text "].Value);  


3.
MatchCollection mc = Regex.Matches(@"<a href=""html/1.html"">第一个页面</a>",
    @"(?isn)<a.+?href=""(?<url>[^""]+)[^>]+>(?<text>.+?)</a>");
foreach (Match m in mc)
{
    MessageBox.Show(m.Groups["url"].Value + Environment.NewLine +
        m.Groups["text"].Value);
}

4.
MatchCollection mc = Regex.Matches(@"<a href=""html/1.html"">第一个页面</a>",
  @"(?isn)<a.+?href=""(?<url>[^""]+)[^>]+>(?<text>.+?)</a>");
foreach (Match m in mc)
{
  MessageBox.Show(m.Groups["url"].Value + Environment.NewLine +
  m.Groups["text"].Value);
}

#8


引用 2 楼 lxcnn 的回复:
try...


C# code
            string test = "<a href=\"http://xxoo.html\">a业务员</a>";
            Regex reg = new Regex(@"(?is)<a[^>]*?href=(['""]?)(?<url>[^'""\s>]+)\1[^>]*>(?<text>(?:(?!</?a\b).)……

果然是高手,完全正确,非常感谢,这就结贴

#9


复制错了。。。。
<a href=(['"]?)\s*(?<url>[^ "']+)\1>(?<text>[\s\S]*?)</a>

#10


谢谢各位大哥哈
第一个最先整出正确答案,所以分大部分给他了,由于我这里上csdn非常卡,我接贴的的时候才看到楼上大哥的回复。。。实在不好意思。。。

#11


Mark.

#12


很合理。 ^_^ 客客师傅厉害。