黑马程序员--正则表达式(09)

本文详细介绍了正则表达式的基本概念和常用语法,包括d、D、w、W等特殊字符的含义。并结合.NET Framework中的Regex类,展示了IsMatch、Replace、Split等方法在实际案例中的应用,如身份证号验证、邮箱地址替换和邮件地址拆分等。

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------


一.正则表达式

        1. 正则表达式概念

             ① 正则表达式是一种用来描述和操作文本的强大语言。其作用主要有三点:用于文字字符的格式匹配查找替换

    ②  一些常见的正则表达式语法:

        (1)  \d  匹配数字(0~9) 如"\d"匹配数字8,不匹配数字12和字母c


        (2)  \D 匹配非数字   如"\D"匹配字母C,不匹配数字8


        (3)  \w 匹配包括下划线在内的任何字字符      如"\w\w"匹配A3,不匹配@


        (4)  \W匹配非字字符    如“\w”匹配@,不匹配A


        (5)  \s 匹配任何空白,包括空格。制表换页等


        (6)  \S匹配非空白字符   如"\S\S\S"匹配A#4


        (7)  […]匹配括号中的任意字符 如[b-d]匹配b、c、d,不匹配e


        (8)  [^…]匹配非括号字符   如[^b-d]匹配e,不匹配b-d的字符 

      
        (9)  {n} 匹配n次字符  如"\d{3}"匹配\d\d\d,不匹配\d、\d\d

        (10) {n,}匹配n次和n次以上    如\w{2,}"匹配\w\w、\w\w\w,不匹配\w

        (11) {n,m}匹配n次以上m次以下 如"\S{1,3}"匹配\S、\S\S、\S\S\S 不匹配\S\S\S\S

        (12)  ? 匹配0才或1次    如"5?"匹配5或0

        (13) +匹配1次或多次 如"\S+"匹配一个以上的\S

        (14) *匹配0次以上  如"\w*"匹配0次以上的\w

        (15) \+实际字符(\ . * + - ? / { } ¥等):表示实际字符  如“\.”表示.       “\+”表示+

        (16) \f匹配换页字符

       ③ 在.Net Framework 中提供了正则表达式使用的类 Regex。

 构造正则表达式的方法:涉及到Regex类,在Regex类中包括的方法有:IsMatch、Replace、Split

   2.案例分析

         (1) IsMatch()方法:放回一个bool值的方法,若测试字符满足正则表达式则返回True,否则False

 例如:判断是否为江西南昌的电话号码

            string Regextext = @"028\d{8}"; //判断是否为南昌号码的表达式
            string TestPhone1 = "02111111111";
            string TestPhone2 = "02822222222";
            if (Regex.IsMatch(TestPhone1, Regextext) == true) //IsMatch是静态方法,可以直接通过类名.
            {
                Console.WriteLine("{0}是江西南昌的电话", TestPhone1);
            }
            else
            {
                Console.WriteLine("{0}不是江西南昌的电话", TestPhone1);
            }
            if (Regex.IsMatch(TestPhone2, Regextext) == true)
            {
                Console.WriteLine("{0}是江西南昌的电话", TestPhone2);
            }
            else
            {
                Console.WriteLine("{0}不是江西南昌的电话", TestPhone2);
            }
            Console.ReadKey();


 例如:匹配是否为身份证号(此处默认18位纯数字)


            Console.WriteLine("请输入您的身份证号");
            string id = Console.ReadLine();
            string RegexTest = @"^\d{18}$";
            //"\d{18}"当你输入19位身份证号的时候也会显示输入合法,而^…$是表示精确匹配,此处表示18位精确匹配。
            if (Regex.IsMatch(id, RegexTest) == true)
            {
                Console.WriteLine("您输入的身份证号合法");
            }
            else
            {
                Console.WriteLine("身份证号格式错误");
            }
 


        (2)Replace()方法:一种替换方法eg2:在发布带有公开电子地址的文章时,将"AT"替换@,避免产生垃圾文件
            Console.WriteLine("请您输入一个电子邮箱");
            string email = Console.ReadLine();
            string RegexTest = @"\w{1,}@\w{1,}\.\w{1,3}"; //邮箱匹配格式
            if (Regex.IsMatch(email, RegexTest) == true)
            {
                Console.WriteLine("邮箱合法");
                string ReplaceEmail = Regex.Replace(email, "@", "AT"); //用"AT"替换合法邮箱中的@
                Console.WriteLine(ReplaceEmail);
            }
            else
            {
                Console.WriteLine("邮箱格式不合法");
            }
            Console.ReadKey();


        (3)Split()方法;拆分的方法,根据匹配正则表达式进行拆分存储在字符串数组中eg3:从群发邮件地址中读取所有邮件地址
            string RegexTest = ";"; //群发邮件中取;作为分隔符
            string groupmail = "aa@qq.com;bb@qq.com;cc@qq.com";
            string[] personal = Regex.Split(groupmail, RegexTest);
          //进行分割字符串,并把分割后的结果存在personal中
            foreach (string str in personal) //输出personal数组中的每个字符串
            {
                Console.WriteLine(str.ToString());
            }
            Console.ReadKey();
 
       (4)构造Regex对象的构造函数有两个重载:一个是不含参数的构造Regex(string Pattern),另一个是有参数的构造Regex(string Pattern,RegexOptions).而RegexOptions属于枚举类型,包括Ignore(忽略大小写)、None(默认)等值
例如:建立一个合法的ISBN验证格式(ISBN验证格式为:X-XXXXX-XXX-X)
           string RegexTest = @"\d-\d{5}-\d{3}-\d{1}";
            Console.WriteLine("请输入一个ISBN");
            string ans = Console.ReadLine();
            //构造正则表达式的验证函数,参数为空
            Regex ISBNtest = new Regex(RegexTest, RegexOptions.None);
            if (ISBNtest.IsMatch(ans) == true)//验证输入的ISBN号
            {
                Console.WriteLine("合法");
            }
            else
            {
                Console.WriteLine("不合法");
            }
            Console.ReadKey();
 

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值