我要一正则表达式,我要每次找到
{Jloop,num=12}
<a>{$ClassTiltle}</a>
{Jloop,num=33}
<img src="{$url}" alt="{$title}">
{end}
这是还可以有内容
{end}
现在我用下面这句的正则
@"\{Jloop,[^\}]+\}[\s\S]*?\{end\}"
找到的是
{Jloop,num=12}
<a>{$ClassTiltle}</a>
{Jloop,num=33}
<img src="{$url}" alt="{$title}">
{end}
是这个样子的,这个正则把第一个{end}给匹配了 
下面是html测试代码,看能弄得出来不,谢谢各位了<body>
{Jloop,num=12}
<a>{$ClassTiltle}</a>
{Jloop,num=33}
<img src="{$url}" alt="{$title}">
{end}
{end}
这里是html代码
{Jloop,num=12}
<a>{$ClassTiltle}</a>
{Jloop,num=33}
<img src="{$url}" alt="{$title}">
{end}
{end}
</body>

解决方案 »

  1.   

    不要用{end}做收尾的字符, 用</body> 做收尾的字符.
      

  2.   


    @"((?<s>\{Jloop,num=[^}]+\})((?!(\{Jloop,num=[^}]+\}|\{end\})).)*)+((?<-s>\{end\})((?!(\{Jloop,num=[^}]+\}|\{end\})).)*)+(?(s)(?!))"
      

  3.   

    楼上这位,我的只匹配{Jloop,开始的 {end}结束的你加上参数了,但好像也不呀
      

  4.   

    "\{Jloop,[^\}]+\}[\s\S]*?.*(\{end\})*.*\{end\}"
      

  5.   

    楼上的还是不行,和我得到的结果一样的,还是匹配了开始的{end]
      

  6.   

    string yourStr = @"{Jloop,num=12}
    <a>{$ClassTiltle}</a>
    {Jloop,num=33}
    <img src="{$url}" alt="{$title}">
    {end}
    {end}";
    string s = Regex.Match(yourStr,@"{Jloop[\s\S]*?{end}(?![\s\S]*?{end})").Value;
      

  7.   

    如果内容是这样的
    <body>
    {Jloop,num=12}
        <a>{$ClassTiltle}</a>
        {Jloop,num=33}
        <img src='{$url}' alt='{$title}'>
        {end}
        sadfasg
    {end}
    dd
    {Jloop,num=12}
        <a>{$ClassTiltle}</a>
        {Jloop,num=33}
        <img src='{$url}' alt='{$title}'>
        {end}
        sadgsa
    {end}
    </body>
    里面有多个的时候 就不行了
      

  8.   


    @"(?isn)((?<s>\{Jloop,[^}]+\})((?!(\{Jloop,[^}]+\}|\{end\})).)*)+((?<-s>\{end\})((?!(\{Jloop,[^}]+\}|\{end\})).)*)+(?(s)(?!))"
      

  9.   

    try...Regex regDiv = new Regex(@"(?is){Jloop[^}]*}(?>{Jloop[^}]*}(?<o>)|{end}(?<-o>)|(?:(?!{Jloop\b|{end}).)*)*(?(o)(?!)){end}");
    MatchCollection mc = regDiv.Matches(yourStr);
    foreach (Match m in mc)
    {
        richTextBox2.Text += m.Value + "\n-------------------\n";
    }