一、什么是正则表达式?
英文Regular Expression,是计算机科学的一个重要概念,她使用一种1数学算法来解决计算机程序中的文本检索,匹配等问题,
正则表达式语言是一种专门用于字符串处理的语言。在很多语言中都提供了对它的支持,c#也不例外,它可以帮我们解决下面的问题:
1,检索:通过正则表达式,从字符串中获取我们想要的部分
2,匹配:判断给定的字符串是否符合正则表达式的过滤逻辑
你可以认为正则表达式表述了一个字符串的书写规则
判断用户输入的密码是否合法,判断用户输入的邮箱格式是否合法
二、正则表达式的组成
正则表达式就是由普通字符以及特殊字符(成为元字符)组成的文字模式。
该模式描述在查找文字主体时待匹配的一个或多个字符串。
三、基本语法元字符
字符 说明
. 匹配除换行符以外的任意字符
\w 匹配字母、数字、下划线、汉字(指大小写字田、0-9的数字、下划线)
\W \w的补集(除”大小写字母、0-9的数字、下划线“之外)
\s 匹配任意空白符(包括换行符/n、回车符/r、制表符/t、垂直制表符/v、换页符/f)
\S \s的补集(除s定义的字符之外)
\d 匹配数字(0-9数字)
\D 表示d的补集 除0-9数字之外)
在正则表达式中,\是转义字符.*是元字符如果要表示一个\.*字符的话,需要使用\\ \.*
四、重复描述字符
字符 说明
{n} 匹配前面的字符n次
{n,} 匹配前面的字符n次或多于n次
{n,m} 匹配前面的字符n到m次
? 重复零次或一次
+ 重复一次或更多次
* 重复零次次或更多次
示例:校验输入内容是否为合法QQ号(备注:QQ号为5-12位数字)
string isQq1 ="1233",isQq2 ="a1233",isQq3 ="o23456789123",
string regexQq=@"^\d{5,12}$" //只允许输入5-12位数字
Console.WriteLine(isQq1+"是否为合法QQ号(5-12位数字):"+ Regex.lsMatch(isQq1,regexQq));
Console.WriteLine(isQq2 +"是否为合法QQ号(5-12位数字):"+ Regex.IsMatch(isQq2,regexQq));
Console.WriteLine(isQq3 +"是否为合法QQ号(5-12位数字):"+ Regex.lsMatch(isQq3,regexQq));
五、择一匹配符
字符 说明
| 将两个匹配条件进行逻辑 “或"(or)运算。
六、Regex
Regex 类
Regex 类用于表示一个正则表达式。
下表列出了 Regex 类中一些常用的方法:
序号 | 方法 & 描述 |
---|---|
1 | public bool IsMatch( string input ) 指示 Regex 构造函数中指定的正则表达式是否在指定的输入字符串中找到匹配项。 |
2 | public bool IsMatch( string input, int startat ) 指示 Regex 构造函数中指定的正则表达式是否在指定的输入字符串中找到匹配项,从字符串中指定的开始位置开始。 |
3 | public static bool IsMatch( string input, string pattern ) 指示指定的正则表达式是否在指定的输入字符串中找到匹配项。 |
4 | public MatchCollection Matches( string input ) 在指定的输入字符串中搜索正则表达式的所有匹配项。 |
5 | public string Replace( string input, string replacement ) 在指定的输入字符串中,把所有匹配正则表达式模式的所有匹配的字符串替换为指定的替换字符串。 |
6 | public string[] Split( string input ) 把输入字符串分割为子字符串数组,根据在 Regex 构造函数中指定的正则表达式模式定义的位置进行分割。 |
七、对正则表达式进行分组
示例:校验P4地址(如:192.168.1.4,为四段,每段最多三位,每段最大数字为255,并且第一位不能为0)
string regexStrIP4=@"^(((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[10]?\d\d?))$";
Console.WriteLine("请输入一个IP4地址:");
string inputStrlp4 = Console.ReadLine();
Console.WriteLine(inputStrlp4 +"是否为合法IP4地址:"+ Regex.IsMatch(inputStrlp4,regexStrIP4));
Console.WriteLine("请输入一个IP4地址:");
string inputStrip4Second = Console.ReadLine();
Console.WriteLine(regexStrIP4 + "是否为合法的IP4地址:" + Regex.IsMatch(inputStrip4Second, regexStrIP4));
IP: 0-255.0-255.0-255.0-255
2 0-4 0-9 第一种情况
2 5 0-5 第二种情况
0-1 0-9 0-9 第三种情况
@"^ 开头
(
(
(2[0-4]\d 第一种情况
|
25[0-5 ] 第二种情况
|
[01]?\d\d?) 第三种情况
\. 表示一个点
)
{3} 一位数+. 重复三遍
(2[0-4] \d| 25[0-5] | [01]?\d\d?) 最后一位数
)
$ 结尾
";