C#正则表达式语法教程

Chinar blog www.chinar.xin

正则表达式教程大全


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

Chinar 的初衷是将一种简单的生活方式带给世人

使有限时间 具备无限可能

Chinar —— 心分享、心创新!

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

为初学者节省宝贵的时间,避免采坑!

Chinar 教程效果:

正则:^((([1]?\d\d?|2[0-4]\d|25[0-5])\.){3}([1]?\d\d?|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 三个字符时
这里写图片描述
举个例子

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 —— 元字符


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

举个例子


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

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 匹配不是单词开头或结束的位置 —— \b 以外的字符
[^a] 匹配除了 a 以外的任意字符
[^Chinar] 匹配除了 Chinar 这几个字符以外的任意字符

举个例子


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


这里写图片描述

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

举个例子


判定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 —— 择一匹配符


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

举个例子


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

/// <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 —— 分组


() —— 括号决定优先级

举个例子


先匹配 c\w 然后重复 2 次
这里写图片描述

/// <summary>
/// 分组 —— 测试连续先后顺序
/// </summary>
static void Main()
{
    while (true)
    {
        string s          = Console.ReadLine();            //等待用户输入
        string regex      = @"(c\w{2}){2}";                //其实就等于 C\w连在一起满足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]?\d\d?|2[0-4]\d|25[0-5])\.){3}([1]?\d\d?|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 提供一站式《零》基础教程

使有限时间 具备无限可能!

Chinar 知你所想,予你所求!( Chinar Blog )


Chinar

END

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

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

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

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值