一
正则则表达式表述了一个字符串的书写规则。
(判断用户输入的密码是否合法,判断用户输入的邮箱格式是否合法)
1.检索:通过正则表达式,从字符串中获取我们想要的部分
2.匹配:判断给定的字符串是否符合正则表达式的过滤逻辑
二.正则表达式的组成
正则表达式就是由普通字符及特殊字符(成为元字符)组成的文字模式,该模式表述在查找文字主体时待匹配的一个或多个字符串
正则表达式中,\是转义字符、*是元字符(如果要表示一个\.*字符的话,就需要用\\ \. \*)
三.定位元字符
在字符串前加@字符,这样编译器就不会去解析其中的转义字符,作为正则表达式的语法(元字符)存在
字符 | 说明 |
^ | 匹配 字符串的开头或行的开头 |
$ | 匹配必须出现在字符串的末尾或行的末尾 |
\b | 匹配单词的开始或结束的位置 |
\B | 匹配非单词的开始或结束的位置 |
\A | 指定匹配必须出现在字符串的开头(忽略Multiline选项) |
\z | 指定匹配必须出现在字符串的结尾(忽略Multiline选项) |
\Z | 指定匹配必须出现在字符串的结尾或字符串结尾处的\n之前(忽略Multiline选项) |
\G | 指定匹配必须出现在上一个匹配结束的地方。与Match.NextMatch()一起使用时,此断言确保所有匹配都是连续的。 |
四.基本语法元字符
字符 | 说明 |
\d | 匹配数字(0-9) |
\D | 表示\d的补集 |
\w | 匹配字母、数字、下划线、汉字 |
\s | 匹配任意空白字符(/n换行、/r回车符、/t制表符、/v垂直制表符、/f换页等) |
\W | |
\S | |
五.反义字符
字符 | 说明 |
\W | \w的补集 |
\S | \s的补集 |
\D | \d的补集(出0-9)的数字之外 |
\B | 匹配非单词的开始或结束的位置 |
[abc] | 匹配中括号中的字符 |
[a-c] | 匹配中括号中a-c的字符 |
[^x] | 匹配除了x以为的任意字符 |
[^adwz] | 匹配除了adwz这几个字符以外的任意字符 |
string str1 = "holle world";
string pattern = @"[^oel]";
string s=Regex.Replace(str1, pattern,"*");
Console.WriteLine(s);
Console.ReadKey();
输出结果:*olle**o*l*
//通过正则表达式Regex.Splic对字符串按符号分割
string str1 = "fagea,feawgrafe;yjsrasfa.reag/grea";
string Pattern = @"[,;./]";
string[] st=Regex.Split(str1, Pattern);
foreach (var VARIABLE in st)
{
Console.WriteLine(VARIABLE);
}
Console.ReadKey();
输出结果:
fagea
feawgrafe
yjsrasfa
reag
grea
六.重复描述字符
字符 | 说明 |
{n} | 连续重复匹配n个字符 |
{n,} | 连续重复匹配n个或多个字符 |
{n,m} | 连续重复匹配n-m个字符 |
? | 重复0次或一次 |
+ | 重复一次或更多次 |
* | 重复零次或更多次 |
//输入的是否为qq号
string str1 = "510646531";
string str2 = "6042146777894";
string str3 = "1f2344556";
string pattern = @"^\d{5,12}$";
bool ismatch = Regex.IsMatch(str1, pattern);
bool ismatch2 = Regex.IsMatch(str2, pattern);
bool ismatch3 = Regex.IsMatch(str3, pattern);
Console.WriteLine($"{ismatch},{ismatch2},{ismatch3}");
Console.ReadKey();
七.则一匹配符
字符 | 说明 |
| | 将连个匹配条件进行逻辑“或”(Or)运算 |
string str1 = "25()dffse的撒热狗";
string Pattern = @"\d|[a-z]";
MatchCollection s = Regex.Matches(str1, Pattern);
foreach (Match VARIABLE in s)
{
Console.WriteLine(VARIABLE);
}
Console.ReadKey();
输出结果:
2
5
d
f
f
s
e
string str1 = "fagea,feawgrafe;yjsrasfa.reag/grea";
//string Pattern = @"[,;./]";
string Pattern1 = @"[,]|[;]|[.]|[/]";
string[] st=Regex.Split(str1, Pattern1);
foreach (var VARIABLE in st)
{
Console.WriteLine(VARIABLE);
}
Console.ReadKey();
八.对正则表达式进行分组
用小括号指定表达式(也叫做分组)
//检测IP地址是否合法
string ip = "192.168.123.010";
string PatternIP = @"^(((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?))$";
bool isIP=Regex.IsMatch(ip, PatternIP);
Console.WriteLine(isIP);
Console.ReadKey();