string sourceStr = "左边范围abc<啊啊>def<呵呵>右边范围";
Regex keyWordRegex = new Regex(@"左边范围(\w*<(\w+)>)*右边范围");
            foreach (Match match in keyWordRegex.Matches(sourceStr))
            {
                foreach (Group group in match.Groups)
                {
                    Response.Write(group.Value);
                    Response.Write("<br />");
                }
            }
代码是C#的,目的是匹配到“啊啊”与“呵呵”。
以abc与def不固定。
现在得到的结果是
左边范围abc<啊啊>def<呵呵>右边范围
def<呵呵>
呵呵并不是想要的,。
希望大家不吝赐教。

解决方案 »

  1.   


    void Main()
    {
        string sourceStr = "左边范围abc<啊啊>def<呵呵>右边范围";
    Regex keyWordRegex = new Regex(@"左边范围(\w*<(\w+)>)*右边范围");
                foreach (Match match in keyWordRegex.Matches(sourceStr))
                { 
                    foreach (Capture c in match.Groups[2].Captures)
                    {
                        Console.WriteLine(c.Value);
                     
                    }
                }
      /*
         啊啊
        呵呵
      */
    }
    你应该取 Groups[2]的Captures内的值
      

  2.   

    C#不是很懂,不过思路可以这样,先拿这个正则“左边范围((?:\w*<[^<>]+>)*)右边范围”去匹配整个串,拿到捕获的子串,再对子串以(\w*<([^<>]+)>)去match,获取匹配的子串数组。
    JS的例子:var s = "#abc<11>def<22>#";
    if(/#((:?[^<>]*<[^<>]+>)*)#/g.test(s)){
       var arr = RegExp.$1.match(/[^<>]*<([^<>]+)>/g);
       alert(arr.join(","));
    }楼主可参考,只是这里的match没c#那么强大