QQ号码分析器这个软件不知道大家用过没有,我现在要开发一个类似功能的程序,可是不知道用什么算法实现。我想到的是用正则表达式,可是写了很久的正则都不能完美实现。像AAA、AAAA这样的规则比较容易实现,(\d)\1\1就行了,可是像ABCD这样的规则就不知道怎么办了,如果用\d\d\d\d会把1111、1122这样的号也都选出来。除了以上难点,还有最难的情侣号和兄弟号,以及顺子号,也不知道如何实现,希望高人来赐教。

解决方案 »

  1.   

    看不到图。
    1234这种是比较难。以前写过。
    http://topic.csdn.net/u/20100712/13/cd273eba-70fe-4046-b96e-994284461c12.html
    (?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)|9(?=0))+\d 
      

  2.   

    抱歉,那个论坛限制了图片外链,软件截图和软件下载都在这个帖子里
    http://www.qqtz.com/read-htm-tid-500304.html
    麻烦大家看一下。1楼那个是匹配顺子号的。ABCD号只是代表4个不同的数字。并不是说A和B是连续数字。
    例如匹配ABCBA这样的小回旋号,15751,49194等。AABB要能匹配1133、4499这样的,但是要让1111不能匹配到
      

  3.   

    不会写正则表达式的路过!
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;
    using System.Xml;
    using System.Collections;namespace ConsoleApplication1
    {
        class Program
        {        public Program(string originalExcelName)
            {
                
                ////And then rename it to 1.xls and save it to c drive.
                //ws.SaveAs("c:\\1.xls", Microsoft.Office.Interop.Excel.XlFileFormat.xlExcel9795, null, null, false, false, false, null, null, true);
      
            }        /// <summary>
            /// 选择4个不同数字的号码
            /// </summary>
            /// <param name="unknown"></param>
            /// <returns></returns>
            public static string ChooseDifferent4(string unknown)
            {
                List<char> list = new List<char>();
                char[] s = unknown.ToCharArray();
                bool sign = true;
                
                for (int i = 0; i < s.Length; i++)
                {
                    for (int j = 0; j < list.Count; j++)
                    {
                        if (s[i] == list[j])
                        {
                            sign = false;
                            break;
                        }
                    }
                    if (!sign)
                    {
                        return "Error";
                    }
                    list.Add(s[i]);
                }
                return unknown;
            }        /// <summary>
            /// 选择回旋号码
            /// </summary>
            /// <param name="unknown"></param>
            /// <returns></returns>
            public static string ChooseReverseNumber(string unknown)
            {
                if (unknown.Length % 2 != 1)
                {
                    return "Illegal reverse number.";
                }            bool sign = true;
                string s1 = unknown.Substring(0, unknown.Length / 2);
                string s2 = unknown.Substring(unknown.Length / 2 + 1, unknown.Length / 2);
                for (int i = 0; i < s1.Length; i++)
                {
                    if (s1[i] != s2[s2.Length - i - 1])
                    {
                        sign = false;
                    }
                }
               
                if (sign)
                    return unknown;
                else
                    return "error";
            }        //Unknown
            public static string ChooseCouplesNumber()
            {
                return "";
            }        static void Main(string[] args)
            {
                Console.WriteLine(Program.ChooseDifferent4("7596"));
                Console.WriteLine(Program.ChooseReverseNumber("12321"));
                Console.WriteLine(Program.ChooseReverseNumber("1232145"));
                Console.ReadLine();
            }
        }
    }
      

  4.   

    情侣号这个东西一会儿下班后再来想一想
    Mark