GeneratedRegex 是 .NET 7 引入的正则表达式源生成器,编译时将字符串字面量转换为高效、类型安全的静态方法,避免运行时编译开销和反射,提升性能并增强 IDE 支持。

GeneratedRegex 是 .NET 7 引入的正则表达式源生成器(Source Generator),它在编译时将 Regex 字符串字面量自动转换为高效、类型安全的静态方法,避免运行时编译开销和反射,提升性能并增强 IDE 支持(如智能提示、编译期错误检查)。
启用 GeneratedRegex 特性
确保项目使用 .NET 7 或更高版本,并在 .csproj 文件中启用正则源生成:
net7.0 true
也可显式引用 System.Text.RegularExpressions.Generators(通常不需要,SDK 已内置)。
用 [GeneratedRegex] 标记静态 Regex 属性或方法
只需给一个 static Regex 字段/属性或返回 Regex 的静态方法加上 [GeneratedRegex] 特性,编译器就会自动生成优化实现:
✅ 推荐写法(属性):
using System.Text.RegularExpressions;public static class Patterns{[GeneratedRegex(@"d{3}-d{2}-d{4}")] // 社保号格式public static partial Regex SsnRegex();}
✅ 方法也支持(更灵活,可传选项):
[GeneratedRegex(@"bw+b", RegexOptions.IgnoreCase)]public static partial Regex WordRegex();
⚠️ 注意:
必须是 static partial 方法,返回 Regex(不能是字段或普通属性)正则模式必须是编译期常量字符串(不能拼接、不能变量)支持大多数 RegexOptions,但不支持 Compiled(源生成本身已“编译”)
直接调用生成的方法,无需 new Regex
生成的代码会提供高性能的匹配入口,例如:
var match = Patterns.SsnRegex().Match("123-45-6789");// 或更推荐:用扩展方法(自动生成)——需 using System.Text.RegularExpressions;bool isValid = "123-45-6789".IsMatch(Patterns.SsnRegex());
实际上,源生成器还会为该 Regex 自动添加一组强类型的扩展方法,比如:
IsMatch(ReadOnlySpan)Match(ReadOnlySpan)Matches(ReadOnlySpan)带捕获组名称的 MatchAs()(需配合 RegexGeneratorOptions 启用)
进阶:启用命名捕获组解析(.NET 8+ 更完善,.NET 7 可用但有限)
.NET 7 的 GeneratedRegex 对命名组支持基础,若需强类型访问捕获内容,可搭配 RegexGeneratorOptions(需手动指定):
[GeneratedRegex(@"(?d{4})-(?d{2})-(?d{2})", RegexOptions.None, "MyDateRegex")]public static partial Regex DateRegex();
然后可通过 DateRegex().Match(...).GetGroup("year") 安全访问;.NET 8 进一步支持 MatchAs() 自动生成结构体解构。
基本上就这些。不用手写 new Regex(...),不担心运行时异常,IDE 能跳转到正则、高亮语法、实时验证——GeneratedRegex 让正则真正融入 C# 的静态世界。
以上就是C#怎么使用GeneratedRegex C# 7正则表达式源生成器的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1443104.html
微信扫一扫
支付宝扫一扫