新闻中心

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

2025-12-15
浏览次数:
返回列表
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();

⚠️ 注意:

AI Code Reviewer AI Code Reviewer

AI自动审核代码

AI Code Reviewer 112 查看详情 AI Code Reviewer
  • 必须是 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正则表达式源生成器的详细内容,更多请关注其它相关文章!


# 正则表达式  # 杭州seo排名外包  # 韶关房地产网站建设  # 珠海抖音seo公司排名  # seo选取火星10服务  # 平湖快速网站建设  # 小说推广视频动漫素材网站  # 安徽国药亚美营销推广招聘  # 南宁seo行者seo  # 还会  # 不需要  # 就会  # 进阶  # 时将  # 有什么区别  # 转换为  # 自动生成  # 主键  # .net  # c#  # word  # 邯郸规模大的推广网站  # 网站搭建如何提升seo 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 163邮箱登录密码 163邮箱忘记密码找回  蛙漫漫画官网在线入口 蛙漫全本漫画免费阅读平台  Win10双系统截图高效法 截屏快捷键速记【技巧】  包子漫画官方网站阅读入口-包子漫画在线漫画官网直达链接  小米14应用无法联网原因分析_小米14网络权限修复  抖音DOU+怎么投最有效 抖音付费推广的ROI提升技巧  AngularJS $http POST请求数据传递与Go后端接收实践  小米Civi 4录制视频过暗_小米Civi 4亮度优化  Centos/Linux 系统下安装 composer 的完整步骤  C++如何使用AddressSanitizer(ASan)_C++调试工具中检测内存访问错误的利器  解决移动端滚动问题的overflow属性应用指南  PySpark中高效提取字符串右侧可变长度数字:使用regexp_extract  J*aScript中高效管理与清空动态列表:避免循环陷阱  uc手机浏览器网页版入口 uc浏览器手机版便捷登录首页  打开就能玩的植物大战僵尸 植物大战僵尸网页版传送门  天眼查怎么看公司融资情况 天眼查企业融资历史查询步骤【攻略】  不会效仿卡普空!《铁拳》制作人澄清:不采取赛事付费|直播|  谷歌浏览器无痕模式怎么开 Chrome开启无痕浏览设置方法【教程】  夸克浏览器网页版最新地址 夸克浏览器官方入口合集  J*aScript异步迭代器_j*ascript异步遍历  网易大神账号申诉需要多久_网易大神账号申诉流程说明  Python类型检查:优化关联可选属性的Mypy推断策略  解决J*aScript中重复选择项的确认对话框显示问题  在J*a中如何使用Exception包装底层异常_异常包装与信息传递方法说明  MAC怎么在地图App里使用“四处看看”_MAC体验部分城市的3D实景街景  顺丰快递查单号物流信息 顺丰快递小程序查询入口  Composer的 "licenses" 命令如何帮助你遵守开源协议_检查项目依赖的许可证合规性  CSS图片焦点样式实现教程:理解与应用tabindex属性  如何在Promise链中有效终止错误处理后的执行  J*a里如何使用forEach遍历Map_Map遍历方法说明  Windows10怎么开启夜间模式 Windows10系统设置调整色温与亮度缓解夜间用眼疲劳【教程】  京东单号查询入口_京东快递订单追踪入口  Bing引擎入口最新2025 Bing搜索免费官方登录  深入理解J*a合成构造器:何时以及为何阻止其生成  火锅吃太多会怎样 火锅吃太多会上火吗  sublime怎么覆盖插件的默认快捷键_sublime快捷键优先级与设置  win11怎么查看应用耗电情况 Win11电池设置查看应用能耗排行榜【优化】  虚幻5科幻题材ARPG大作遭取消!本是《奇异人生》厂商新作  抓大鹅解压小游戏 抓大鹅摸鱼解压入口  Node.js CSV 数据处理:基于字段空值条件过滤整条记录的策略  J*aScript教程:根据元素文本内容动态设置背景色  J*a递归快速排序中静态变量的状态管理与陷阱  Go调试环境为何无法启动_Go调试器启动失败原因与解决策略  一加 Nord 5 隐私权限异常_一加 Nord 5 系统安全优化  Yandex搜索引擎一键访问入口_俄罗斯Yandex官网免登录  css滚动动画效果怎么实现_使用Animate.css滚动触发动画类  解决Python logging 中 datefmt 导致时间戳固定不变的问题  一加手机拍照效果不好怎么办 一加哈苏影像调校与专业模式使用教程【高手篇】  Lar*el如何生成PDF或Excel文件_Lar*el文档导出工具与使用教程  sublime如何配置Go语言开发环境_sublime搭建Golang编译运行系统 

搜索