正则表达式详解以及在C#中的应用

        正则表达式在线测试工具:https://regex101.com/

一、限定符的含义

        ?:表示它前面的字符出现0次/1次。例如:

used?
//可以匹配use或used(d可以说0/1次,可缺省)

*:表示它前面的字符出现0次或多次

ab*c
可以匹配ac/abc/abbbbbc
不能匹配adc/addddc

        +:匹配出现1次以上的字符

ab+c
可以匹配abc/abbbbbc
不会匹配ac

        { }:精准匹配次数->(次数介于a,b之间,b可以缺省表示a次以上)

ab{2,6}c        //缺省ab{2}c
//匹配abbc到abbbbbbc之间的字符

        ( ):字符组合

(ab)+
//匹配含有ab的字符串

二、或运算符

        |:表示两者出现一个即可(需要与括号联用,否则会按照顺序取或)

a (cat|dog)
//可以匹配a cat或者a dog

a cat|dog
//可以匹配a cat或者dog

        [ ]:字符类;检测由括号字符构成的字符串

[abc]+
//可以匹配abc/aaabbcc
//可以指定范围;例如:[a-z]为所有小写字符、[a-zA-Z0-9]是所有英文字符+数字

三、取反

        ^:查找除指定字符意外的内容,可以与[ ]联用

[^0-9]+
//匹配不包含数字的内容

四、元字符

\d数字

\D

非数字
\w单词
\W非单词
\s空白符(包含tab和换行)
\S非空白符
.任意字符
^匹配行首
$匹配行尾
^a    //只会匹配每行第一个a
a$    //只会匹配每行最后一个a

五、贪婪与懒惰匹配

        默认情况下,正则表达式会尽可能多的匹配字符串,但有的时候我们并不需要这样

<.+>    //会将html内部的整个字符串进行匹配
<.+?>   //只会匹配hmtl两边的尖括号内容

         使用?会将默认的贪婪匹配切换为懒惰匹配

六、实例测试

        1.RGB颜色值匹配

#[0-9a-zA-Z]{6}\b
//RGB值为十六进制数,只能取自0-9或者a-z(不区分大小写)
//后面加上{6}来保证其只有6位
//最后加上\b来划定字符边界(不能超出)

         2.IPv4地址匹配

\d+\.\d+\.\d+\.\d+\.
//IPv4格式为四段数字+.隔开(数字.数字.数字.数字)
//\d+表示任意数字;\.用来转义.
//但是IP地址范围是0-255,此表达式并不会限定范围

改进算法
\b(25[0-5]|2[0-4]\d|[01]?\d\d?.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)\b
//解释: 1.如果第一位为25,则最后一位只能取0-5
//      2.如果第一位为2,第二位能取0-4,第三位是任意值
//      3.如果第一位是01,后续两位能取任意值,同时IP地址可以由1-3为数字构成,即第一、第三位数字可以省略
//用或符号|进行连接
//{3}表示内容重复3次;但是由于最后一段不包含.,需要单独匹配
//前后加上\b用来确定边界

 七、表达式格式总结

 八、正则表达式在C#中的应用

        首先需要引入组件

using System.Text.RegularExpressions

        简单的匹配方法

IsMatch(String, String);否找到了匹配项
Match(String, String)找到第一个匹配项
Matches(String, String)找到所有匹配项
Replace(String, String)用指定字符串替换匹配项
Split(String, String)按指定条件拆分字符串

         匹配测试代码

            List<string> StrList = new List<string>();
            StrList.Add("abcd");
            StrList.Add("Abcd");
            StrList.Add("Ab12");
            StrList.Add("1234");
            //用于测试的容器

            string RegeX = "^[a-z]+$";  //全部匹配
            foreach (var item in StrList)
            {
                if (Regex.IsMatch(item, RegeX) == true)
                    Console.WriteLine(item + " 是纯小写");
                else
                    Console.WriteLine(item + " 不是纯小写");
            }
            Console.WriteLine();

            RegeX = @"\d+";             //包含匹配
            foreach (var item in StrList)
            {
                if (Regex.IsMatch(item, RegeX) == true)
                    Console.WriteLine(item + " 包含数字");
                else
                    Console.WriteLine(item + " 不包含数字");
            }
            Console.WriteLine();

            RegeX = @"^Ab[\w\W]*";      //开头匹配
            foreach (var item in StrList)
            {
                if (Regex.IsMatch(item, RegeX) == true)
                    Console.WriteLine(item + " 以Ab开头");
                else
                    Console.WriteLine(item + " 不是以Ab开头");
            }
            Console.WriteLine();

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值