zoukankan      html  css  js  c++  java
  • C#正则表达式语法教程

    C#语法之正则


    本文提供全流程,中文翻译。

    Chinar 坚持将简单的生活方式,带给世人!

    (拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例)



    Chinar —— 心分享、心创新!

    助力快速理解: 正则表达式的用法、规范

    为新手节省宝贵的时间,避免采坑!


    Chinar 教程效果:
    正则:^((([1]?dd?|2[0-4]d|25[0-5]).){3}([1]?dd?|2[0-4]d|25[0-5]))$
    这里写图片描述



    全文高清图片,点击即可放大观看 (很多人竟然不知道)


    1

    Regular Expression —— 正则表达式


    正则表达式的用法,在诸多语言中,几乎都是一样

    这里就以 C# 为例,用 VS 控制台输出 做演示

    概念:
    对于正则表达式官方的简介,我这里都不多说了,一句话概括就是:
    用一些正则字符按照语法要求进行自定义的组合,用来判断需要处理的字符串是否合规
    也就是用来记录字符规则的代码
    (其实你就先理解为:定义一个判断条件 就是 定义正则表达式)
    用途:
    处理字符串 / 判断字符串是否合规



    Chinar 将用大量的例子去,帮助大家理解正则是个什么玩意儿….


    2

    Regex Tools —— 正则表达式工具


    Chinar 收集并挑选了网上大神 / 公司做的较为出色的正则工具,一并推荐给大家!

    1. 正则图示工具—— Regulex

    2. 正则图示工具—— Regexper

    3. 菜鸟正则测试工具—— 菜鸟正则在线测试

    4. 站长正则测试工具—— 站长正则测试工具


    3

    Contain abc —— 是否包含 abc字符


    当我们需要判断用户输入字符中,是否含有 abc 三个字符时

    这里写图片描述

    举个栗子黑白88

    static void Main()
    {
        while (true)
        {
            string str     = Console.ReadLine();                //把用户输入的字符存入 str
            string regex   = @"[abc]";                          //C#中 加@"[abc]" 为正则表达式基本写法
            bool   isMatch = Regex.IsMatch(str, regex);         //比较:—— IsMatch(需要判断的字符,正则):返回bool值 
            Console.WriteLine(isMatch ? "满足条件" : "不满足"); //输出结果
            Console.WriteLine();                                //空行
        }
    }

    输入 / 输出结果:

    1
    不满足
    
    a
    满足条件
    
    Chinar
    满足条件
    
    新年快乐!bcadlf
    满足条件
    
    1231534564dc
    满足条件

    4

    MetaCharacter —— 元字符


    正则字符 作用
    . 匹配除换行符( )以外的任意字符
    w 匹配字母或数字或下划线或汉字
    s 匹配任意的空白符
    d 匹配数字
     匹配单词的开始或结束
    ^ 匹配字符串的开头
    $ 匹配字符串的结尾

    举个栗子黑白88

    在字符串开头 / 结尾处添加字符

            static void Main()
            {
                StringBuilder s = new StringBuilder("www.unity.kim", 50); //声明一个字符串,容量50
    
                //news=正则类.替换字符串(需要处理的字符串,正则,添加的字符串)—— 把符合正则情况的位置,替换为 后边字符串
                string news = Regex.Replace(s.ToString(), "^", "网址:"); //^ :代表开头
                Console.WriteLine(news);                               //输出
    
                news = Regex.Replace(s.ToString(), "$", "结尾"); //$:代表结尾
                Console.WriteLine(news);
                Console.WriteLine("..................................定位元字符.....................................");
                Console.ReadLine();
            }

    输出结果:

    网址:www.unity.kim
    www.unity.kim结尾
    ..................................定位元字符.....................................

    5

    ESC —— 反义字符


    正则字符 作用
    W 匹配任意不是字母,数字,下划线,汉字的字符 —— w 以外的字符
    S 匹配任意不是空白符的字符 —— s 以外的字符
    D 匹配任意非数字的字符 —— d 以外的字符
    B 匹配不是单词开头或结束的位置 ——  以外的字符
    [^a] 匹配除了 a 以外的任意字符
    [^Chinar] 匹配除了 Chinar 这几个字符以外的任意字符

    举个栗子黑白88

    替换 / 判定特定字符,是否满足条件,替换

    这里写图片描述

    static void Main()
    {
        while (true)
        {
            string s       = Console.ReadLine();       //s接收用户输入
            string regex   = @"^W*$";                 //正则:以任意除字母、下划线、数字以外的字符 —— 开头到结尾的
            bool   isMatch = Regex.IsMatch(s, regex);  //匹配用户输入,是否满足正则条件
            Console.WriteLine(isMatch ? "满足" : "不满足"); //三目运算
            Console.WriteLine();                       //空行
    
            s                 = "abcdef";
            regex             = @"[^bde]";                    //[^bde]代表了除 bde之外的所有字符,任意一个字符
            string newReplace = Regex.Replace(s, regex, "1"); //匹配 s 中,除了bde之外的字符,替换为 1
            Console.WriteLine(newReplace);
            Console.WriteLine();
        }
    }

    输出结果:

    !
    满足
    
    1b1de1
    
    !$@#$123
    不满足
    
    1b1de1
    
    )(*&^%$#@!
    满足
    
    1b1de1

    6

    Repetition Descriptor —— 重复描述字符


    正则字符 作用
    * 重复 0 次或 多次
    + 重复 1 次或 多次
    ? 重复 0 次或 1
    {a} 重复 a
    {a,} 重复 a 次或 多次
    {a,b} 重复 a b

    举个栗子黑白88

    判定QQ号是否合法 —— (这里提供2种)

    这里写图片描述
    图 一

    这里写图片描述
    图 二

    /// <summary>
    /// 判断QQ号是否合法
    /// </summary>
    static void Main()
    {
        while (true)
        {
            string qq    = Console.ReadLine();       //等待用户输入
            string regex = @"^d{5,11}$";            //正则:开头结尾都是数字,并且5-11位都为数字
            bool   isqq  = Regex.IsMatch(qq, regex); //判断并返回布尔值
            Console.WriteLine(isqq ? "是QQ号" : "不是QQ号"); //三目运算
            Console.WriteLine();
        }
    }

    输出结果:

    10000
    是QQ号
    
    122694885
    是QQ号
    
    1234
    不是QQ号
    
    123456789012
    不是QQ号
    
    abc123456
    不是QQ号
    
    123456!
    不是QQ号

    7

    Alternative —— 择一匹配符


    | —— 或,把可能性进行或相关

    举个栗子黑白88

    从给定字符串中拆分出名字

            /// <summary>
            /// 择一匹配符
            /// </summary>
            static void Main()
            {
                StringBuilder   s               = new StringBuilder("网址:www.unity.kim/1/ab3.html", 50); //定义一个字符串
                string          regex           = @"d|[a-z]|[/]|[.]";                                  //正则:包含数字 | a-z的字母 | / | . 的字符。
                MatchCollection matchCollection = Regex.Matches(s.ToString(), regex);                   //返回的是一个 MatchCollection 集合  
                foreach (Match match in matchCollection)                                                //遍历集合
                {
                    Console.Write(match.ToString()); //输出到一行中
                }
                Console.WriteLine();
                Console.WriteLine("...............择一匹配符一....................................");
    
                s.Remove(0, s.Length);
                s.Append("a,钱二。孙三:李四;孬蛋》");
                regex            = @"[,。:;》]"; //正则:满足任意一个,。:;》这些字符的,来分割字符串
                string[] strings = Regex.Split(s.ToString(), regex);
                foreach (var s1 in strings)
                {
                    Console.WriteLine(s1);
                }
                Console.WriteLine("...............择一匹配符二....................................");
    
                regex   = @"[,]|[。]|[:]|[;]|[》]"; // | —— 或的意思
                strings = Regex.Split(s.ToString(), regex);
                foreach (var s1 in strings)
                {
                    Console.WriteLine(s1);
                }
                Console.WriteLine("...............择一匹配符三....................................");
                Console.ReadLine();
            }

    输出结果:

    www.unity.kim/1/ab3.html
    ...............择一匹配符一....................................
    a
    钱二
    孙三
    李四
    孬蛋
    
    ...............择一匹配符二....................................
    a
    钱二
    孙三
    李四
    孬蛋
    
    ...............择一匹配符三....................................
    
    

    8

    Grouping —— 分组


    () —— 括号决定优先级

    举个栗子黑白88

    先匹配 cw 然后重复 2 次

    这里写图片描述

            /// <summary>
            /// 分组 —— 测试连续先后顺序
            /// </summary>
            static void Main()
            {
                while (true)
                {
                    string s          = Console.ReadLine();            //等待用户输入
                    string regex      = @"(cw{2}){2}";                //其实就等于 Cw连在一起满足2次   满足前者2次
                    string newReplace = Regex.Replace(s, regex, "小狗"); //替换满足 正则的 字符为:小狗
                    Console.WriteLine("结果为:" + newReplace);
                    Console.WriteLine(".....................正则分组一....................................");
                }
            }

    输出结果:

    
    c1acbdadsfasdfsadfjl你好12345
    结果为:小狗adsfasdfsadfjl你好12345
    .....................正则分组一....................................
    c11cd!alskdj年
    结果为:c11cd!alskdj年
    .....................正则分组一....................................
    cqwcer,..34你好cagc33,crrcpp,c44,c66c__
    结果为:小狗,..34你好小狗,小狗,c44,小狗
    .....................正则分组一....................................
    
    

    9

    Verification IPV4 —— 验证 IP 合法


    综合训练

    举个栗子黑白88
    验证IPV4地址的合法性

    这里写图片描述

            /// <summary>
            /// 分组 —— 测试IP合法性
            /// </summary>
            static void Main()
            {
                string regex = @"^((([1]?dd?|2[0-4]d|25[0-5]).){3}([1]?dd?|2[0-4]d|25[0-5]))$"; //判断IP地址是否合规
    
                while (true)
                {
                    string s       = Console.ReadLine();             //等待用户输入
                    bool   isMatch = Regex.IsMatch(s, regex);        //验证ip是否合法
                    Console.WriteLine(isMatch ? "是IP地址" : "不是IP地址"); //三目运算
                    Console.WriteLine(".....................正则分组二....................................");
                }
            }

    输出结果:

    
    1.1.1.1
    是IP地址
    .....................正则分组二....................................
    255.255.255.255
    是IP地址
    .....................正则分组二....................................
    256.255.255.255
    不是IP地址
    .....................正则分组二....................................
    0.0.0.-1
    不是IP地址
    .....................正则分组二....................................
    a.b.c.d
    不是IP地址
    .....................正则分组二....................................
    
    

    这里写图片描述


    10

    Verification IPV4 —— 菜鸟深造


    Chinar 毕竟不是专业级教师,所以想要更深的了解正则,请去菜鸟深造!

    Chinar 已为您提供了传送门 ↓ ↓

    菜鸟 - 正则表达式30分钟入门教程(其实很长….一个小时也很难吃透)

    其实一般都是要用到的时候才去搜索

    收藏好,目录2中的4个工具,对于你正则的学习会很有用处!

    感谢您的支持!


    支持

    May Be —— 搞开发,总有一天要做的事!


    拥有自己的服务器,无需再找攻略!

    Chinar 提供一站式教程,闭眼式创建!

    为新手节省宝贵时间,避免采坑!


    先点击领取 —— 阿里全产品优惠券 (享受最低优惠)


    1 —— 云服务器超全购买流程 (新手必备!)

    2 —— 阿里ECS云服务器自定义配置 - 购买教程(新手必备!)

    3—— Windows 服务器配置、运行、建站一条龙 !

    4 —— Linux 服务器配置、运行、建站一条龙 !





    Chinar


    END

    本博客为非营利性个人原创,除部分有明确署名的作品外,所刊登的所有作品的著作权均为本人所拥有,本人保留所有法定权利。违者必究

    对于需要复制、转载、链接和传播博客文章或内容的,请及时和本博主进行联系,留言,Email: ichinar@icloud.com

    对于经本博主明确授权和许可使用文章及内容的,使用时请注明文章或内容出处并注明网址

  • 相关阅读:
    Java利用QRCode.jar包实现二维码编码与解码
    javax.servlet不存在问题的解决
    订单号生成规则
    Koa处理url
    网站追踪技术:前端持久化evercookie
    网站追踪技术:“帆布指纹识别”canvas fingerprinting
    Typescript类、命名空间、模块
    TypeScript 基础类型、变量声明、函数、联合类型、接口
    webpack中的hash、chunkhash、contenthash区别
    不刷新网页修改url链接:history.pushState()和history.replaceState()新增、修改历史记录用法介绍
  • 原文地址:https://www.cnblogs.com/chinarbolg/p/9601440.html
Copyright © 2011-2022 走看看