对abaaaabacacaabaxxxyyyxyz
abaaaabacacaabatesdfaxyz
匹配结果为红色标记部分,我是这样写的:aba(.*?)xyz可匹配结果都不对,要怎么写正则表达式啊?

解决方案 »

  1.   

    上面说的意思可能不准确,我在写一遍:
    对abaaaabacacaabaxxxyyyxyza和
    abaaaabacacaabatesdfaxyzeer 
    匹配结果为红色标记部分,我是这样写的:aba(.*?)xyz可匹配结果都不对,要怎么写正则表达式啊? 
      

  2.   

    aba.{6}xyz如果中间是固定长度的话
      

  3.   

    LZ的意思是匹配在xyz之前最后一个aba开始到xyz为止的值?
      

  4.   

    using System;
    using System.Text.RegularExpressions;class Demo
    {
      static void Main()
      {
        foreach (string s in new string[]{"abaaaabacacaabaxxxyyyxyz", "abaaaabacacaabatesdfaxyz"})
        {
          foreach (Match m in Regex.Matches(s, "aba.*?xyz", RegexOptions.RightToLeft))   
          {
            Console.WriteLine(m.Value);
          }
        }
      }
    }
    /* 程序输出:
    abaxxxyyyxyz
    abatesdfaxyz
    */
      

  5.   

    // 或者用这个也行:aba(?!.*aba).*xyz,这个正则就不用 RegexOptions.RightToLeft 选项了。using System;
    using System.Text.RegularExpressions;class Demo
    {
      static void Main()
      {
        foreach (string s in new string[]{"abaaaabacacaabaxxxyyyxyz", "abaaaabacacaabatesdfaxyz"})
        {
          foreach (Match m in Regex.Matches(s, "aba(?!.*aba).*xyz"))   
          {
            Console.WriteLine(m.Value);
          }
        }
      }
    }
    /* 程序输出:
    abaxxxyyyxyz
    abatesdfaxyz
    */
      

  6.   

    如果能保证是最后一组,那么加RegexOptions.RightToLeft参数即可,但如果是这样,就完全没必要用正则了,string的LastIndexOf就可以做到了
    对于这种可能嵌套的字符串取最内层的,最稳妥的做法,就是整体排除
    最典型的例子就是<div>...<div>...</div>...</div>取最内层的<div>...<div>foreach (string s in new string[] { "abaaaabacacaabaxxxyyyxyza", "abaaaabacacaabatesdfaxyzeer" })
    {
        foreach (Match m in Regex.Matches(s, "aba((?!aba|xyz).)*xyz", RegexOptions.IgnoreCase))
        {
            Console.WriteLine(m.Value);
        }
    }
    Console.ReadLine();