【C#】正则表达式(必学)

301 阅读2分钟

正则表达式

英文Regular Expression,是计算机科学的一个重要概念,她使用一种数学算法来解决计算机程序中的文本检索,匹配等问题,正则表达式语言是一种专门用于字符串处理的语言。在很多语言中都提供了对它的支持,c#也不例外

两个功能:

检索:从字符串中获取想要的部分

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

常用的用法:可以判断用户输入的密码或邮箱格式是否合法等

正则表达式就是有普通字符以及特殊字符组成 的文字模式。特殊字符即是元字符

\ 转义字符,如果要表示\ 则用\\

@符号,在正则表达式前面添加@字符,这样表示不让编译器去解析其中的转义字符,而作为正则表达式的语法存在

定位符

^ 匹配字符串的开始位置

$ 匹配字符串的结束位置

\b 匹配一个单词的边界

\B 匹配非单词边界

例子:匹配开始和结束

string str = "World";
//匹配开始的位置,替换成指定字符串
string res = Regex.Replace(str, "^", "Hello ");//输出Hello World
//匹配结束的位置,替换成指定字符串
string res2 = Regex.Replace(str, "$", "!");//输出World!

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

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

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

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

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

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

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

例子:只允许输入数字

Regex.IsMatch(input, @"^\d*$");

[abc] 表示匹配a,或匹配b,或匹配c

[a-c] 表示匹配a到c之间的字符

[^x] 表示匹配除了x以外的字符

例子:代替除了ace之外的任意字符为*

string str = "abcdef";
string pattern = @"[^ace]";//代表一个字符,除了ace之外的任意字符
string res = Regex.Replace(str, pattern, "*");//代替除了ace之外的任意字符为*

//结果为 a*c*e*

限定符

* 表示出现0个或多次

+ 表示出现1次或多次

? 表示出现0次或1次

{n} 表示出现n次,n表示一个非负整数

{n,} 表示至少出现n次

{n,m} 表示出现n次到m次

例子:验证输入的是否为合法的QQ号(备注:QQ号为5-12位数字)

string qq1 = "123", qq2 = "397458006",qq3="abc123456";
string pattern = @"^\d{5,12}$";

bool isMatch1 = Regex.IsMatch(qq1, pattern);//false
bool isMatch2 = Regex.IsMatch(qq2, pattern);//true
bool isMatch3 = Regex.IsMatch(qq3, pattern);//false

择一匹配

| 字符,将两个匹配条件进行逻辑或运算

例子:查找数字或字母

string str = "123哈哈abc啊啊";
string pattern = @"\d|[a-z]";
MatchCollection col =  Regex.Matches(str, pattern);

foreach (Match match in col)
{
    Console.WriteLine(match);
}

结果为

分组

使用小括号()

例子:单个字符重复两次替换为**

string str = "aabbaaacccaaaa";
string pattern = @"a{2}";
string res = Regex.Replace(str, pattern, "**");

//结果为 **bb**accc****

例子:校验IP4地址

  string pattern = @"^(((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?))$";

相关链接:

学习正则表达式

常用正则表达式