C#怎么使用GeneratedRegex C# 7正则表达式源生成器

煙雲
发布: 2025-12-15 16:52:04
原创
251人浏览过
GeneratedRegex 是 .NET 7 引入的正则表达式源生成器,编译时将字符串字面量转换为高效、类型安全的静态方法,避免运行时编译开销和反射,提升性能并增强 IDE 支持。

c#怎么使用generatedregex c# 7正则表达式源生成器

GeneratedRegex 是 .NET 7 引入的正则表达式源生成器(Source Generator),它在编译时将 Regex 字符串字面量自动转换为高效、类型安全的静态方法,避免运行时编译开销和反射,提升性能并增强 IDE 支持(如智能提示、编译期错误检查)。

启用 GeneratedRegex 特性

确保项目使用 .NET 7 或更高版本,并在 .csproj 文件中启用正则源生成:

<PropertyGroup>
  <TargetFramework>net7.0</TargetFramework>
  <EnableDefaultRegexGenerator>true</EnableDefaultRegexGenerator>
</PropertyGroup>
登录后复制

也可显式引用 System.Text.RegularExpressions.Generators(通常不需要,SDK 已内置)。

用 [GeneratedRegex] 标记静态 Regex 属性或方法

只需给一个 static Regex 字段/属性或返回 Regex 的静态方法加上 [GeneratedRegex] 特性,编译器就会自动生成优化实现:

✅ 推荐写法(属性):

using System.Text.RegularExpressions;
<p>public static class Patterns
{
[GeneratedRegex(@"\d{3}-\d{2}-\d{4}")] // 社保号格式
public static partial Regex SsnRegex();
}
登录后复制

✅ 方法也支持(更灵活,可传选项):

[GeneratedRegex(@"\b\w+\b", RegexOptions.IgnoreCase)]
public static partial Regex WordRegex();
登录后复制

⚠️ 注意:

ChatCut
ChatCut

AI视频剪辑工具

ChatCut 1086
查看详情 ChatCut
  • 必须是 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<char>)</char>
  • Match(ReadOnlySpan<char>)</char>
  • Matches(ReadOnlySpan<char>)</char>
  • 带捕获组名称的 MatchAs<t>()</t>(需配合 RegexGeneratorOptions 启用)

进阶:启用命名捕获组解析(.NET 8+ 更完善,.NET 7 可用但有限)

.NET 7 的 GeneratedRegex 对命名组支持基础,若需强类型访问捕获内容,可搭配 RegexGeneratorOptions(需手动指定):

[GeneratedRegex(@"(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})", 
    RegexOptions.None, 
    "MyDateRegex")]
public static partial Regex DateRegex();
登录后复制

然后可通过 DateRegex().Match(...).GetGroup("year") 安全访问;.NET 8 进一步支持 MatchAs<dateparts>()</dateparts> 自动生成结构体解构。

基本上就这些。不用手写 new Regex(...),不担心运行时异常,IDE 能跳转到正则、高亮语法、实时验证——GeneratedRegex 让正则真正融入 C# 的静态世界。

以上就是C#怎么使用GeneratedRegex C# 7正则表达式源生成器的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号