.NET-13-正则表达式

/* 元字符
         * .:表示匹配除了\n之外的所有单个字符
         * 如a.b:在a与b之间与一个任意的单个字符
         *
         * []:字符组,表示任意的单个字符,用中括号汇总的字符来匹配
         * a[0-9]b:表示0到9之间的任意一个字符
         * a[a-zA-Z]b:表示任意的一个字符,这个字符可以不区分大小写
         * a[a-zA-Z0-9]b:表示任意的一个字符,这个字符是a-z之间不区分大小写的字符也可以是数字
         * a[a-zA-Z0-9!#]b:表示任意的一个字符,这个字符是a-z之间不区分大小写的字符也可以是数字,或者是!或者是#
         * a[a-z]b:表示任意的一个字符,这个字符只能是小写的a-z之间的字符
         * a[a-z][A-Z]b:表示有两个字符,第一个字符是小写的,第二个字符是大写的
         * a[abc.]b:表示有一个字符,科室是abc也可以是.;这里也可以加上转义字符写成a[abc\.]b,在这里如果.出现在中括号中就表示一个普通的.
         *
         * |:表示或,他的优先级比较低,会放到最后计算
         * a(x|y)b:在ab之间有一个字符,这个字符可以是x也可以是y
         * z|food:匹配的是z或者是food
         *
         * -:连接字符
         * a[0-9]b:表示ab之间有一个字符,这个字符是0到9之间的数字,如果不适用连接字符也可以写作a[0123456789]b,但是这样太麻烦
         *
         * {}:表示前面表达式出现的次数
         * {n}:表示前面的表达式必须出现n次,不能多也不能少
         * {n,}:表示前面的表达式最少出现n从,上不封顶
         * {n,m}:表示前面的表达式至少出现n次,最多出现m次
         * a[a-zA-Z][a-zA-Z][a-zA-Z]b:表示ab之间有3个字符,这个字符是不区分大小写的英文字母,可以简写成a[a-zA-Z]{3}b
         *
         * *:表示出现0次货多次,等价于{0,}
         * +:表示出现一次或多次,等价于{1,}
         * ?:表示出现0次或者一次,等价于{0,1},最多一次可以不出现
         * ?也可以终止贪婪模式
         * 例如:颜色的英式写法和美式写法为color/colour,这里可以写成colou?r,表示字母u出现0次或者1次,这样就可以匹配英式和美式的单词颜色
         *
         *
         * ^: 表示字符串的开始,也表示取反
         * ^hello:表示以h开头,并且后面要跟ello,也可以表述为以hello开头
         * a[0-9]b:表示ab中有一个0到9的数字
         * a[^0-9]b:表示ab中有一个非0到9的数字
         *
         * $:表示字符串的结尾
         * abc$:表示必须以abc结尾的字符串,也可以理解为必须以c结尾并且前面要跟ab
         *
         * 简写表达式
         * 应为电脑使用的是unicode编码,所以在用\d匹配数字的时候,是可以匹配全角的,如果改成ASCII就不能匹配全角了
         * \w也可以用来匹配汉字
         * \d:表示数字,这里也可以取全角的数字,[0-9]是有区别的,[0-9]只能匹配半角数字
         * \D:表示数字的取反
         *
         * \s:表示所有的空白符,空格,制表符等
         * \S:表示\s的反面
         *
         * \w:一般表示[a-zA-Z0-9],这里也可以取汉字
         * \W:\w的反面
         *
         * \b;表示单词的边界
         * welcome to china:  这里没有把come识别为一个单词而是吧wolcome识别为一个单词就是应为单词边界
         *
         * 表示所有字符
         * [\s\S] 或者[\w\W]   都表示全部字符,等同于.与\n一起的效果
         *
         *
         *
         *
         *
         *
         *
         */

        public static void GetZF()
        {
            //邮政编码
            //IsMatch表示只要整个字符串中包含需要匹配的信息就会返回true
            //bool result = Regex.IsMatch("", "[0-9]{6}");
            //如果想要全部匹配需要加上起始和终结符,要求笔试是6个数字开头并且以6个数字结尾,限定完全匹配6个数字
            //bool result = Regex.IsMatch("", "^[0-9]{6}$");


            //匹配半角和全角的数字
            //bool result = Regex.IsMatch("", @"^\d{6}$");
            //RegexOptions.ECMAScript参数表示按照ASCII来进行匹配,这样会过滤掉全角数字
            //bool result = Regex.IsMatch("", @"^\d{6}$", RegexOptions.ECMAScript);


            //下面的返回结果为true,表达式表示的意思是以z开头或者以food结尾
            //这是应为|的优先级很低,是放在最后计算的
            //string str = "zood";
            //bool result = Regex.IsMatch(str, "^z|food$");


            //这里返回的是false,应为()改变了优先级,这里表示z或者food,是完全匹配的
            //这里只有z和food这两种情况,等价于^z$|^food$
            //string str = "zood";
            //bool result = Regex.IsMatch(str, "^(z|food)$");


            //只能输入10到20的数字
            //string str = "18";
            //bool result = Regex.IsMatch(str, "^(1[0-9]|20)$");


            //表达式的意思是以b开头,以g结尾,中间跟0个或者多个除\n之外的任意字符,所以下面两个表达式都是匹配的
            //bool result = Regex.IsMatch("bbbbg", "^b.*g$");
            //bool result = Regex.IsMatch("bg", "^b.*g$");


            //判断身份证
            //1身份证必须是15位或者是18位,第一位不能是0
            //2如果是15为则全部是数字,如果是18位则最后一位可以是Xx或者是数字
            //^([1-9][0-9]{14})$|^([1-9][0-9]{16}[0-9xX])$
            //也可以写成如下,以非0开头的数字,之后是14位数字
            //之后是两位数字加以为数字或者x或X结尾,增加一个?表示这部分可以有也可以没有,之后结尾
            //^[1-9][0-9]{14}([0-9]{2}[0-9xX])?$
            //另外,在写表达式的时候尽量不要使用|,性能会比较慢
            string str = "";
            bool result = Regex.IsMatch(str, "^([1-9][0-9]{14})$|^([1-9][0-9]{16}[0-9xX])$");

        }

猜你喜欢

转载自blog.csdn.net/m0_37532448/article/details/81206749
今日推荐