任意5位以上的数字,要求按以下规则排除连续位相同
如:22222
后3位数相同
如:22111
连续交替
如:121212
顺序排列
如:3456789
反顺序排列
如:654321求正则表达式实现,有点难度吧?分不够另开贴在加

解决方案 »

  1.   

    前几个好办 (\d)\1{4,}|\d{2,}?(\d)\2\2|((\d)\d)\3+\4?正反顺序的比较麻烦
      

  2.   

    后面两个就不要用正则了,提供一个方法:
    string str="4567";
    string pattern1="0123456789";
    string pattern2="9876543210";
    if(pattern1.IndexOf(str)>-1||pattern2.IndexOf(str)>-1)//排除
      

  3.   

    sorry,顺序的发现漏洞,会有不连续但是大小顺序的情况
      

  4.   

    判断连续不用正则 
    static void Main(string[] args)
            {
                string ptn = @"(\d)\1{4}|\d{2}(\d)\2{2}|(\d{2})\3{2}";
                string[] sSet = { "13146","22222", "22111", "121212","12345","765432" };
                foreach (string s in sSet)
                {
                    Console.WriteLine(Regex.Match(s, ptn).Success || IsSortNum(s));//false,true,true,true,true,true
                }        }        /// <summary>
            /// 判断数字是否连续
            /// </summary>
            /// <param name="s"></param>
            /// <returns></returns>
            static bool IsSortNum(string s)
            {
                char[] nums = s.ToCharArray();
                int t = (int)nums[1] - (int)nums[0];
                if (Math.Abs(t) != 1) return false;
                for(int i=1;i<nums.Length-1;i++)
                {
                    if ((int)nums[i + 1] - (int)nums[i] != t)
                    {
                        return false;
                    }
                }
                return true;
            }
      

  5.   

    改一下:
    正则中
    ^(\d)\1{5,}$ 匹配字符为5个以上相同数字
    (\d)\2{2,}$ 匹配后三位相同数字
    ^(\d{2})\3{2,}$ 匹配二位重复交错数字
     static void Main(string[] args)
            {
                string ptn = @"^(\d)\1{5,}$|(\d)\2{2,}$|^(\d{2})\3{2,}$";
                string[] sSet = { "13146", "22222", "22111", "121212", "12345", "765432" };
                foreach (string s in sSet)
                {
                    Console.WriteLine(Regex.Match(s, ptn).Success || IsSortNum(s));//false,true,true,true,true,true
                }        }        /// <summary>
            /// 判断数字是否连续
            /// </summary>
            /// <param name="s"></param>
            /// <returns></returns>
            static bool IsSortNum(string s)
            {
                char[] nums = s.ToCharArray();
                int t = (int)nums[1] - (int)nums[0];
                if (Math.Abs(t) != 1) return false;
                for (int i = 1; i < nums.Length - 1; i++)
                {
                    if ((int)nums[i + 1] - (int)nums[i] != t)
                    {
                        return false;
                    }
                }
                return true;
            }
      

  6.   

    string ptn = @"^(\d)\1{4,}$|(\d)\2{2,}$|^(\d{2})\3{2,}$";
    ^(\d)\1{4,}$ 匹配字符为5个以上相同数字