如果有这样一个标记:<aa bb=vvv cc=vvv dd="vvv" ee=vvv >如何通过正则式匹配他的bb,cc,dd,ee对应的值?已知bb,cc,dd,ee的位置不确定。

解决方案 »

  1.   

    <aa bb=vvv cc=vvv dd="vvv" ee=vvv >
      

  2.   

    大概这样,string s = "dd<aa bb='xxx' cc=yyy dd=\"zzz\" ee=ttt >  ss";Regex re = new Regex(@"<\s*\S+\s*((?<name>[^=]+)=('(?<value>[^']*)'|""(?<value>[^""]*)""|(?<value>\S+))\s*)*[^>]*>",RegexOptions.Singleline); Match m = re.Match(s);
    if (m.Success)
    {    Console.WriteLine("matched:{0}", m.Value);    for (int i=0; i < m.Groups["name"].Captures.Count; i++)
       {
    Console.WriteLine("{0}={1}",m.Groups["name"].Captures[i].Value,
    m.Groups["value"].Captures[i].Value);
       }
    }
    else
    {
    Console.WriteLine("no match");
    }
      

  3.   

    感谢思归老大,我根据需要改了一下<img\s*(?<att>(?<name>[^=<>]+)=(?:'(?<value>[^'<>]*)'|"(?<value>[^"<>]*)"|(?<value>[^\s<>]*))\s*)*>在一些网页中可用,但是好像只匹配最后一个name另外一些网页中直接停止响应,不知道哪里有问题
      

  4.   

    string str = "fadf<aa bb=vvv cc=vvv dd=\"vvv\" ee=vvv >asdfadsf<ddd aa=we ad=33e>dd";
    Regex re = new Regex(@"<(?<label>[^>]*)>",RegexOptions.IgnoreCase);
    MatchCollection ms1 = re.Matches(str);
    Regex re1 = new Regex(@"(?<name>[^\s=""']*)=['""]?(?<value>[^'""\s]*)['""]?",RegexOptions.IgnoreCase);
    MatchCollection ms2;
    foreach (Match m in ms1)
    {
                    ms2 = re1.Matches(m.Groups["label"].ToString());
                    foreach (Match n in ms2)
                    {
                        MessageBox.Show(n.Groups["name"] + ":" + n.Groups["value"]);
                    }
    }
      

  5.   

    也许是空格问题<img\s*(\s*(?<name>[^=<>]+)=(?:'(?<value>[^']*)'|"(?<value>["]*)"|(?<value>[^\s]*)))*[^>]*>
      

  6.   

    感谢思归老大,这几天工作变动没及时结贴,现在结了它。这个表达式最后我用了
    <img\s*(?:(?<att>(?<name>[^\s<>=]*)=(?<value>[^\s<>"']+|"[^"<>]*"|'[^'<>]')\s*)|(?<property>[^<>\s=]+)\s*)*>
    这个。