C#正则表达式
正则表达式是一种匹配输入文本的模式。.Net框架提供了允许这种匹配的正则表达式引擎。模式由一个或多个字符、运算符和结构组成
正则表达式的本质还是一个字符串
1.正则表达式概述
正则表达式语言是一种专门用于字符串处理的语言。它包含两个功能:
-
一组用于表示字符类型的转义代码
-
一个系统,在搜索操作中,它把子字符串和中间结果的各个部分组合起来
2.正则表达式的作用
-
检索:通过正则表达式,从字符串中获取我们想要的部分
-
匹配:判断给定的字符串是否符合正则表达式的过滤逻辑
可以认为正则表达式表述了一个字符串的书写规则,判断用户输入的密码是否合法,判断用户输入的邮箱正则表达式的匹配是按照每个位置的字符进行判断验证的
3.正则表达式的组成-元字符
正则表达式就是由普通字符以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串
-
特殊符号元字符
元字符 | 描述 | |
---|---|---|
1 | @符号 | 正则表达式字符串前面加上@字符,这样不让编译器去解析其中的转义字符 |
2 | *符号 | *代表0-多个字符 |
3 | \符号 | \是转义字符. *是元字符,如果要表示一个\ . *字符的话,需要使用**\ . * |
4 | | | 将两个匹配条件进行逻辑“或”(Or)运算。 |
5 | ( ) | 用小括号来指定子表达式(也叫做分组) |
2.定位元字符
元字符 | 描述 | |
---|---|---|
1 | \b | 匹配单词的开始或结束 |
2 | \B | 匹配非单词的开始或结束 |
3 | ^ | 匹配必须出现在字符串的开头或行的开头 |
4 | $ | 匹配必须出现在以下位置:字符串结尾、字符串结尾处的\n之前或行的结尾。 |
5 | \A | 指定匹配必须出现在字符串的开头(忽略Multiline选项)。 |
6 | \Z | 指定匹配必须出现在字符串的结尾(忽略Multiline选项)。 |
7 | \z | 指定匹配必须出现在字符串的结尾或字符串结尾处的\n之前(忽略Multiline选项)。 |
8 | \G | 定匹配必须出现在上一个匹配结束的地方。与Match.NextMatch()一起使用时,此断言确保所有匹配都 是连续的。 |
3.基本语法元字符
元字符 | 描述 | |
---|---|---|
1 | . | 匹配除换行符以外的任意字符 |
2 | \w | 匹配字母、数字、下划线、汉字(指大小写字母、0-9的数字、下划线_) |
3 | \W | \w的补集(除“大小写字母、0-9的数字、下划线_”之外) |
4 | \s | 匹配任意空白符 (包括换行符/n、回车符/r、制表符/t、垂直制表符/v、换页符/f) |
5 | \S | \s的补集 (除\s定义的字符之外) |
6 | \d | 匹配数字(0-9数字) |
7 | \D | 表示\d的补集(除0-9数字之外) |
4.反义字符
元字符 | 描述 | |
---|---|---|
1 | [ab] | 匹配中括号中的字符 |
2 | [a-c] | a字符到c字符之间是字符 |
3 | [ ^ x] | 匹配除了x以外的任意字符 |
4 | [ ^adwz] | 匹配除了adwz这几个字符以外的任意字符 |
5.重复描述字符
元字符 | 描述 | |
---|---|---|
1 | {n} | 匹配前面的字符n次 |
2 | {n,} | 匹配前面的字符n次或多于n次 |
3 | {n,m} | 匹配前面的字符n到m次 |
4 | ? | 重复零次或一次 |
5 | + | 重复一次或更多次 |
6 | * | 重复零次或更多次 |
4.Regex类
Regex 类用于表示一个正则表达式
序号 | 方法 | 描述 |
---|---|---|
1
| public bool IsMatch( string input, int startat ) | 指示Regex 构造函数中指定的正则表达式是否在指定的输入字符串中找到匹配项,从字符串中指定的开始位置开始。 |
2 | public static bool IsMatch( string input, string pattern ) | 指示指定的正则表达式是否在指定的输入字符串中找到匹配项。 |
3 | public MatchCollection Matches( s tring input ) | 在指定的输入字符串中搜索正则表达式的所有匹配项。 |
4 | public string Replace( string inp ut, string replacement ) | 在指定的输入字符串中,把所有匹配正则表达式模式的所有匹配的字 符串替换为指定的替换字符串。 |
5 | public string[] Split( string inp ut ) | 把输入字符串分割为子字符串数组,根据在 Regex 构造函数中指定的正则表达式模式定义的位置进行分割。 |
6 | public bool IsMatch( string input) | 指示Regex构造函数中指定的正则表达式是否在指定的输入字符串中找到匹配项。 |
Console.WriteLine("请输入合法的QQ号");
//QQ号的正确格式:5位,最多11位,纯数字,开头不能为0
string qq = Console.ReadLine();
//按照上面规则写正则
string pattern = @"^[1-9]\d{4,10}$";
if (Regex.IsMatch(qq, pattern))
{
Console.WriteLine("合法");
}
else
{
Console.WriteLine("QQ不合法");
}