在C#的开发场景中,处理文本校验、内容提取、格式匹配等需求时,正则表达式是非常高效的工具,而System.Text.RegularExpressions命名空间下的Regex类就是实现正则匹配的核心载体。开发者可以通过调用Regex类的不同方法,完成从简单到复杂的各类匹配操作。

Regex类的基础使用准备
在使用Regex进行匹配之前,首先需要引入对应的命名空间,否则无法直接调用Regex相关的类和方法。引入方式如下:
using System.Text.RegularExpressions;
Regex类的使用通常有两种方式,一种是直接调用Regex的静态方法,不需要手动创建实例;另一种是先创建Regex实例,再调用实例方法。如果同一个正则表达式需要多次使用,创建实例的方式可以减少正则编译的开销,性能更优。
常用的正则匹配方法
1. 判断字符串是否匹配正则:IsMatch方法
IsMatch方法用于判断输入的字符串是否符合指定的正则表达式规则,返回值为布尔类型,匹配成功返回true,否则返回false。这个方法适合做格式校验类的需求,比如校验手机号、邮箱格式是否合法。
下面是使用静态IsMatch方法校验手机号格式的示例:
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
// 定义手机号正则,匹配1开头,第二位是3-9,后面9位任意数字的11位手机号
string phonePattern = @"^1[3-9]d{9}$";
string testPhone1 = "13812345678";
string testPhone2 = "12812345678";
bool isMatch1 = Regex.IsMatch(testPhone1, phonePattern);
bool isMatch2 = Regex.IsMatch(testPhone2, phonePattern);
Console.WriteLine($"测试手机号1是否匹配:{isMatch1}"); // 输出 True
Console.WriteLine($"测试手机号2是否匹配:{isMatch2}"); // 输出 False
}
}
如果需要多次校验同一个正则规则,也可以先创建Regex实例,再调用实例的IsMatch方法:
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string phonePattern = @"^1[3-9]d{9}$";
Regex phoneRegex = new Regex(phonePattern);
string testPhone = "15987654321";
bool result = phoneRegex.IsMatch(testPhone);
Console.WriteLine($"手机号校验结果:{result}"); // 输出 True
}
}
2. 获取单个匹配结果:Match方法
当需要从字符串中提取第一个符合正则规则的内容时,可以使用Match方法。该方法返回Match类型的对象,Match对象的Success属性可以判断是否有匹配结果,Value属性可以获取匹配到的具体内容。
下面的示例从一段文本中提取第一个数字串:
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string text = "订单号是123456,金额是789元";
// 匹配连续的数字
string pattern = @"d+";
Match match = Regex.Match(text, pattern);
if (match.Success)
{
Console.WriteLine($"匹配到的第一个数字串:{match.Value}"); // 输出 123456
}
else
{
Console.WriteLine("未匹配到内容");
}
}
}
3. 获取所有匹配结果:Matches方法
如果字符串中存在多个符合正则规则的内容,需要全部提取出来,就可以使用Matches方法。该方法返回MatchCollection集合,遍历集合就可以拿到所有的匹配结果。
下面的示例提取文本中所有的数字串:
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string text = "订单号是123456,金额是789元,数量2件";
string pattern = @"d+";
MatchCollection matches = Regex.Matches(text, pattern);
Console.WriteLine("所有匹配到的数字串:");
foreach (Match match in matches)
{
Console.WriteLine(match.Value);
}
// 输出:
// 123456
// 789
// 2
}
}
正则匹配的高级用法
分组匹配
正则表达式中可以通过括号定义分组,匹配完成后可以通过分组获取对应部分的子内容。Match对象的Groups属性可以获取所有分组,索引0是整体匹配内容,索引1及以后是对应括号的分组内容。
下面的示例从邮箱地址中提取用户名和域名部分:
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string email = "testuser@ipipp.com";
// 分组1匹配@前的用户名,分组2匹配@后的域名
string pattern = @"^(w+)@(.+)$";
Match match = Regex.Match(email, pattern);
if (match.Success)
{
Console.WriteLine($"完整邮箱:{match.Groups[0].Value}");
Console.WriteLine($"用户名:{match.Groups[1].Value}"); // 输出 testuser
Console.WriteLine($"域名:{match.Groups[2].Value}"); // 输出 ipipp.com
}
}
}
匹配选项配置
创建Regex实例时,可以传入RegexOptions枚举来配置匹配规则,比如忽略大小写、多行模式、忽略空白等。常用的选项包括:
- RegexOptions.IgnoreCase:匹配时不区分大小写
- RegexOptions.Multiline:多行模式,^和$可以匹配每一行的开头和结尾
- RegexOptions.IgnorePatternWhitespace:忽略正则中的空白字符,方便编写可读性更高的正则
下面的示例演示忽略大小写的匹配:
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string text = "Hello World";
string pattern = @"hello world";
// 不配置选项时,大小写不匹配
bool result1 = Regex.IsMatch(text, pattern);
// 配置忽略大小写选项
bool result2 = Regex.IsMatch(text, pattern, RegexOptions.IgnoreCase);
Console.WriteLine($"默认匹配结果:{result1}"); // 输出 False
Console.WriteLine($"忽略大小写匹配结果:{result2}"); // 输出 True
}
}
注意事项
在使用Regex进行匹配时,需要注意正则字符串的转义问题。C#中字符串如果前面不加@符号,反斜杠需要双写转义,比如匹配数字的正则应该写成"\d+",如果加了@符号,就可以直接写@"d+",减少转义带来的错误。
另外,如果正则表达式本身存在语法错误,创建Regex实例或者调用静态方法时会抛出ArgumentException,实际开发中可以根据需要添加异常处理逻辑,避免程序崩溃。
C#Regex正则表达式匹配Match方法MatchCollection修改时间:2026-06-24 10:54:37