C#学习之----正则表达式

正则表达式

定义:它使用一种数学算法解决计算机中的文本检索、匹配等问题,它是一种专门用于字符串处理的语言。它可以帮我解决下面的问题

1 检索 :通过正则表达式,从字符串中获取我们想要的部分

2 匹配:判断给定的字符串是否符合正则表达式的过滤逻辑

我们使用它可以判断用户密码和邮箱是否合法

组成:有普通字符及特殊字符(元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。

@符号:

在正则表达式字符串前面加上@字符,这样不让编译器去解析其中的转义字符,而作为正则表达式的语法(元字符)存在。

string s =@"www.baidu.com \n lkjsdflkj";

定位元字符

字符 说明

\b 匹配单词的开始或结束

\B 匹配非单词的开始或结束

^ 匹配必须出现在字符串的开头或行的开头

$ 匹配必须出现在以下位置:字符串结尾、字符串结尾处的 \n 之前或行的结尾。

\A 指定匹配必须出现在字符串的开头(忽略 Multiline 选项)。

\z 指定匹配必须出现在字符串的结尾(忽略 Multiline 选项)。

\z 指定匹配必须出现在字符串的结尾或字符串结尾处的 \n 之前(忽略 Multiline 选项)。

\G 指定匹配必须出现在上一个匹配结束的地方。与 Match.NextMatch() 一起使用时,此断言确保所有匹配都是连续的。

基本语法元字符

字符 说明

. 匹配除换行符以外的任意字符

\w 匹配字母、数字、下划线、汉字 (指大小写字母、0-9的数字、下划线_)

\W \w的补集 ( 除“大小写字母、0-9的数字、下划线_”之外)

\s 匹配任意空白符 (包括换行符/n、回车符/r、制表符/t、垂直制表符/v、换页符/f)

\S \s的补集 (除\s定义的字符之外)

\d 匹配数字 (0-9数字)

\D 表示\d的补集 (除0-9数字之外)

在正则表达式中,\是转义字符. * 是元字符 如果要表示一个\ . *字符的话,需要使用\\ \. \*

反义字符

字符 说明

\W \w的补集 ( 除“大小写字母、0-9的数字、下划线_”之外)

\S \s的补集 (除\s定义的字符之外)

\D 表示\d的补集 (除0-9数字之外)

\B 匹配不是单词开头或结束的位置

[ab] 匹配中括号中的字符

[a-c] a字符到c字符之间是字符

[^x] 匹配除了x以外的任意字符

[^adwz] 匹配除了adwz这几个字符以外的任意字符

重复描述字符

字符 说明
{n} 匹配前面的字符n次

{n,} 匹配前面的字符n次或多于n次

{n,m} 匹配前面的字符n到m次

? 重复零次或一次

+ 重复一次或更多次

* 重复零次或更多次

择一匹配

字符 说明

|         将两个匹配条件进行逻辑“或”(Or)运算。


对正则表达式分组()

用小括号来指定子表达式(也叫做分组) 


1  定位字符--在某个字符串的某个位置添加字符串


            string s = "I am a blue cat";


            //搜索字符串,找出符合正则表达式的情况,然后把所有符合的位置,替换成后面的字符串


            string res = Regex.Replace(s, "^", "开始:");//在开始处 添加“开始:”字符串


            Console.WriteLine(res);


            string resEnd = Regex.Replace(s, "$", "结束");//第二个参数 是正则表达式,"$"表示在结尾处添加字符串(第三个参数)  

     

            Console.WriteLine(resEnd);

2 基本语法元字符
            
            //判断输入的字符串 是否是数字组成
            string sR = Console.ReadLine();

            //*--代表0或者多个字符。 ^--开始位置 $--结束位置 \d--代表数字
            string pattern = @"^\d*$";//正则表达式 表示字符串的以数字开始和结束  @"a*"--表示任意个由a组成的字符串
  
            bool isMath=Regex.IsMatch(sR, pattern);

            Console.WriteLine(isMath);

 //3 反义字符

            string str = "I am a cat";

            string ptn=@"[^abc]";//它代表了除了abc之外的 任意字符

            string newStr=Regex.Replace(str,ptn,"*");

            Console.WriteLine( newStr);


 //4重复描述字符

            //判断 qq是否输入正确 qq是5-12个数字

            string qqStr = "123456";// Console.ReadLine();

            string qqPtn = @"^\d{5,12}$";

            bool qqIsMath = Regex.IsMatch(qqStr, qqPtn);

            Console.WriteLine("qq输入匹配?" + qqIsMath);

 //5 择一匹配

            string sMath = "34(*$#djfk)";
            string ptnP = @"\d|[a-z]";//查找数字或者a-z 将两个匹配条件进行逻辑 or 运算
            MatchCollection col = Regex.Matches(sMath, ptnP);
            foreach (Match m in col)
            {
                Console.WriteLine(m.ToString());
            }

            //将名字分开显示
            string name = "zhangsan;lisi,wangwu.zhaoliu1";

            string namePtn = @"[;]|[,]|[.]"; // @"[;,.]"名字结束的字符

            string[] ar = Regex.Split(name, namePtn);
            foreach (var m in ar)
            {
                Console.WriteLine(m.ToString());
            }

            //6 表达式分组
            string inputStr = "abbaabba";// Console.ReadLine();
            string strGroup = @"(ab\w{2}){2}";//"ab\w{2}ab\w{2|" abbaabba-->55555将两者为abba的字符串替换为55555
            string group= Regex.Replace(inputStr, strGroup, "55555");
            Console.WriteLine(group);

            //判断一个IP地址是否正确 0-255.0-255.0-255.0-255格式
            //0-1 0-9 0-9 
            //2 0-4 0-9
            //2 5   0-9
            string ipStr = Console.ReadLine();
            string ipPtn = @"^(((2[0-4]\d|25[0-5]|[0-1]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[0-1]?\d\d?))$";
            bool ipMath = Regex.IsMatch(ipStr, ipPtn);
            Console.WriteLine("IP 是否匹配?"+ipMath);


            Console.Read();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值