首页/开发/正则与编码速查/命名分组的写法与引用方式
正则进阶45 条

命名分组的写法与引用方式

命名分组按名字而非编号读取捕获内容,模式调整时引用不易错位;定义语法分「问号大写 P 加尖括号」与「问号加尖括号」两派,模式内引用与替换引用也各有写法,跨引擎复用需逐一核对。

正则与编码速查开发更新于 2026-10-17
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌‌‌​‌‌​‌‌‌​​‌‌​​​​‌​‌‌​‌‌​‌​‌‌​​‌​‌​‌‌​​‌​​​​‌​‌‌​‌​‌‌​​‌‌‌​‌‌‌​​‌​​‌‌​‌‌‌‌​‌‌‌​‌​‌​‌‌‌​​​​​​‌​‌‌​‌​‌‌‌​​‌‌​‌‌‌‌​​‌​‌‌​‌‌‌​​‌‌‌​‌​​​‌‌​​​​‌​‌‌‌‌​​​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​

用名字代替编号

命名分组给捕获组起一个标识符,读取时按名字取值,不再依赖括号顺序。模式里插入或删除分组时,取值代码不必跟着改,这是它在维护性上的最大价值。

写法并不统一

定义语法在各引擎中分两派,模式内的反向引用与替换串里的引用写法也各不相同。跨语言复用模式前先把这三处(定义、模式内引用、替换引用)逐一对照,避免只在某一处想当然。

基本信息

主要收益取值按名字,模式调整时引用不易错位
定义语法差异部分引擎在问号后写大写 P 加尖括号名字,其余引擎直接写问号加尖括号名字
模式内引用各引擎写法不同,常见为反斜杠加 k 加名字或问号加大写 P 加等号加名字
替换引用常见为反斜杠加 g 加尖括号名字、美元符号加尖括号名字、美元符号加花括号名字
命名规则名字通常只允许字母数字与下划线,且不能以数字开头
唯一性同一模式内名字一般不允许重复,具体规则以引擎文档为准

典型使用场景

  • 解析结构化字段,按名字取出各段内容
  • 替换中引用命名分组,替换串含义自明
  • 同一模式被多处复用时,避免新增括号导致取值错位
  • 在模式内引用命名分组做成对结构校验
  • 给复杂模式的分段命名,顺带提升可读性

三种写法的对照

三种写法的对照
定义(部分引擎)   (?P<year>\d{4})      问号大写 P 加尖括号名字
定义(其余引擎)   (?<year>\d{4})       问号加尖括号名字

模式内引用         \k<year>   或   (?P=year)

替换引用           \g<year>   或   $<year>   或   ${year}

取值               Python  group('year')
                   JS      match.groups.year
                   Java    matcher.group("year")

# 名字必须唯一且不能以数字开头

命名分组的三个位置

位置作用注意点
定义处给分组起名两派语法不同,需按引擎选择
模式内引用要求此处内容与已捕获内容相同属反向引用,需引擎支持
替换与取值按名字读取或写回各语言接口名与写法不同
命名分组通常仍保留数字编号,两种读取方式可以并存。新代码优先用名字读取,能显著降低模式调整带来的连带修改。
部分实现允许重复名字并保留多次匹配结果,部分则明确禁止重名。写跨引擎模式时不要依赖重名特性,改为不同名字更安全。

易错点

  • 把某一引擎的命名语法直接照搬到另一引擎,模式编译失败
  • 命名分组与数字编号混用取值,模式调整后编号错位而名字仍正确,掩盖了问题
  • 在模式内引用命名分组时写成替换串语法,引用失效
  • 依赖重名分组特性,换引擎后行为不一致

数据来源与参考

  • Python 官方文档 re 模块:命名分组语法与引用
  • PCRE2 官方文档 pcre2pattern(3):命名子模式与引用
  • MDN JavaScript 参考:命名捕获组与替换引用

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/regex/named-group-syntax.html

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌‌‌​‌‌​‌‌‌​​‌‌​​​​‌​‌‌​‌‌​‌​‌‌​​‌​‌​‌‌​​‌​​​​‌​‌‌​‌​‌‌​​‌‌‌​‌‌‌​​‌​​‌‌​‌‌‌‌​‌‌‌​‌​‌​‌‌‌​​​​​​‌​‌‌​‌​‌‌‌​​‌‌​‌‌‌‌​​‌​‌‌​‌‌‌​​‌‌‌​‌​​​‌‌​​​​‌​‌‌‌‌​​​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​