请教各位大虾,用正则表达式匹配以字符串<f id=开头,以字符串</f>结尾的所有字符串,匹配字符该如何写?

解决方案 »

  1.   

    ^(<f id=)[\w\W]*(<\/f>)$
    不确定
      

  2.   

    <f id=[^>]*>([\s\S](?!<f id=))*?</f([^>])*>
    缺点是要是出现了如下的形式则出错<f id=开头, 中间还有一个<f id=的字符,结束符</f>
      

  3.   

    今天刚写完个类似的(中间有没有字符?):
    中间有字符的:
    string str  = "SDGS<f id=content size=XXX style='XXXXX'>DGSDGS</f>";
    str = System.Text.RegularExpressions.Regex.Replace(str,"<f id=.*?>.*?</f>","$");
    Response.Write(str);
    中间没有字符的:
    string str  = "SDGS<f id=content size=XXX style='XXXXX'></f>";
    str = System.Text.RegularExpressions.Regex.Replace(str,"<f id=.*?></f>","$");
    Response.Write(str);
      

  4.   

    MatchCollection mc = Regex.Matches(yourString, "<f id=(?<any>.+?)</f>", RegexOptions.IgnoreCase);
    foreach (Match m in mc)
    {
        Response.Write(m.Groups["any"].Value.ToString() + "<br />");
    }
      

  5.   

    匹配所有:MatchCollection mc = Regex.Matches(yourString, @"^<f id=\w*</f>$", RegexOptions.IgnoreCase);
      

  6.   

    string yourStr = ......
    MatchCollection mc = Regex.Matches(yourStr, "<f\\s+id=.+?>[\\s|\\S]*?</f>", RegexOptions.IgnoreCase);
    foreach(Match m in mc)
    {
        m.Value;
    }
      

  7.   

    这主要看你的<f id=和</f>之间是否有特殊情况的存在了,如果在这之间不会出现<或<f id=这样的字符串,好多正则都可以匹配的,试下下面的MatchCollection mc = Regex.Matches(str, "<f id=.*?</f>", RegexOptions.IgnoreCase);
      

  8.   

    MatchCollection mc = Regex.Matches(yourString, @"<f\s+id=\w*</f>", RegexOptions.IgnoreCase);
      

  9.   

    string vsPattern = @"^<f id=.*</f>$";
    if(Regex.IsMatch(vsText,vsPattern,RegexOptions.IgnoreCase))
    {}测试过,呵呵
    @"^<f id=\w*</f>$"  好像 ?<f id= adsfa ></f>"这样id=后面有空格的不能匹配?
    共同学习!
      

  10.   

    以上的有一点不足,在以下这两种情况下:
    1、<f id="f1">...<f>...</f>...</f>...<f id="f2">...<f>...</f>
    匹配的只是第一个<f到第一个</f>,而不是第二个</f>
    2、<f id=  >...</f>
    这种不完整的也被匹配到。正则表达式改成这个样
    <f\s+id=[^>\s]+((?:[^<]|<(?!f id=))*)</f>
    可以匹配比较配对的完整的<f></f>标签对不过还没有完全解决多重嵌套的问题,以下用depth关键字就解决了,不过有很多正则表达式引擎还没有支持,.net的Regex支持。
    <f\s+id=(?>[^<>]+|\((?<DEPTH>)|\)(?<-DEPTH>))*(?(DEPTH)(?!))</f>