绿色风's Blog
专注AutoIT(Au3)
  • 首页
  • 流●年
  • 笔●记
    • 学习随记
    • 源码示例
  • 脚●本
    • UDF(收集)
    • 工作室UDF
    • 工具●教程
    • 教程之GDI
  • 作●品
  • 下●载
  • 情怀ExcelTip
3月302016

au3 正则参考 -52-命名捕获组

作者:绿色风   发布:2016-3-30 11:26 Wednesday   分类:工具●教程   阅读:3632次   评论:0条  

<!DOCTYPE html> RegExp

命名捕获组 : (?子表达式) 或 (?'name' 子表达式)

其中名称是有效的捕获组名称, 名称不得包含任何标点符号字符, 并且不能以数字开头. 而子表达式是任何有效的正则表达式模式.

正则表达式可以反向引用命名捕获组. 语法 \k<名称> , 在同一正则表达式中引用匹配的子表达式, 其中名称是命名捕获组的名称.

 

命名组可以通过编程方式, 或通过正则表达式语言语法引用已命名的组.

正则表达式 ((?abc)\d+)?(?xyz)(.) 按编号和名称产生下表所列捕获组. 编号为 0 的第一个捕获组总是指整个模式的最终匹配结果.

字符串: abc123xyz258gef,

表达式: ((?abc)\d+)?(?xyz)(.)

选择标志 4 的匹配结果按编号和名称产生下列捕获组:

数字 组名称 模式及其捕获内容
0 默认名称 0 ((?abc)\d+)?(?xyz)(.)         匹配结果 : [0]=> [0]abc123xyz258gef,
1 默认名称 1 ((?abc)\d+)        匹配结果 : [0]=> [1]abc123
2 One (?abc)       匹配结果 : [0]=> [2]abc
3 Two (?xyz)        匹配结果 : [0]=> [3]xyz
4 默认名称 4 (.)       匹配结果 : [0]=> [4]258gef,

 

下面示例标识文本字符串中重复的单词, 重复单词紧随的单词. 正则表达式模式定义了两个命名的子表达式: duplicateWord, 它表示重复的单词; 和 nextWord, 它表示重复单词后面跟随的单词.

字符串: He said that that was the the correct answer.

表达式: (?\w+)\s\k\W(?\w+)

匹配结果(选择标志 3):
[0]that ; 位置 8 开始的重复单词.
[1]was ; 其后紧随的单词.
[2]the ; 位置 22 开始的重复单词.
[3]correct ; 其后紧随的单词.

表达式分析:

模式

说明

(?\w+) 匹配一个或多个单词字符. 命名此捕获组名称为 duplicateWord
\s 与空白字符匹配.
\k 匹配名为 duplicateWord 的捕获组. \k 表示引用先前捕获组的名称.
\W 匹配包括空格和标点符号的一个非单词字符
(?\w+) 匹配一个或多个单词字符. 命名此捕获组名称为 nextWord

 

下面示例的正则表达式 \D+(?\d+)\D+(?\d+)? 中, 第一个名为 digit1 的组捕获一个或多个数字字符. 第二个名为 digit2 的组捕获一个或多个数字字符的零个或一个匹配项. 如果第二个捕获组成功匹配文本, 则文本的值定义组对象的值. 如果第二个捕获组无法匹配输入字符串, 则最后一个成功匹配的值定义组对象的值.

字符串: abc123def456abc123def

表达式: \D+(?\d+)\D+(?\d+)?

匹配结果(标志 4):
[0]=> [0]abc123def456
[0]=> [1]123
[0]=> [2]456
[1]=> [0]abc123def
[1]=> [1]123

表达式分析:

模式 说明
\D+ 匹配一个或多个非十进制数字字符
(?\d+) 匹配一个或多个十进制数字字符. 将匹配值分配到 digit1 命名组.
\D+ 匹配一个或多个非十进制数字字符
(?\d+)? 匹配一个或多个十进制数字字符的 0 个或一个匹配项. 将匹配值分配到 digit2 命名组.

 

下面的示例使用命名的分组构造, 从包含 “数据分析:值” 格式的数据字符串中捕获子字符串, 正则表达式通过冒号 : 拆分数据:

字符串: Section1:119900

表达式: ^(?\w+):(?\w+)

匹配结果(标志 3):
[0]Section1
[1]119900

表达式分析:

模式 说明
^ 从输入字符串的开头部分开始匹配.
(?\w+) 匹配一个或多个单词字符. 此捕获组的名称为 name
: 匹配冒号.
(?\w+) 匹配一个或多个单词字符. 此捕获组的名称为 value

命名捕获组编号规则

命名捕获组为显式命名, 通过组名可以访问指定的组, 而不需要去一个个的数编号, 同时避免了在正则表达式扩展过程中, 捕获组的增加或减少对引用结果导致的不可控.

不过容易忽略的是, 命名捕获组也参与了编号的, 在只有命名捕获组的情况下, 捕获组的编号也是按照 "(" 出现的顺序, 从左到右, 从 1 开始进行编号的 . 编号为 0 的第一个捕获组总是指整个模式的匹配结果.

例如正则表达式: (?\d{4})-(?\d{2}-(?\d{2}-(?\d\d)) 的组编号如下:

用以上正则表达式匹配字符串: 2016-03-01. 选择标志 4, 测试匹配结果为:

编号 命名 捕获组 匹配内容
0   (?\d{4})-(?\d{2}-(?\d\d)) [0]=> [0]2016-03-01
1 year (?\d{4}) [0]=> [1]2016
2 date (?\d{2}-(?\d\d)) [0]=> [2]03-01
3 day (?\d\d)) [0]=> [3]01

 






本文固定链接: http://www.jianyiit.com/post-210.html

blogger
该日志由 绿色风 于2016-3-30 11:26 Wednesday发表在 工具●教程 分类下。
版权所有:《绿色风's Blog》 → 《au3 正则参考 -52-命名捕获组》;
除特别标注,本博客很多文章均为原创. 互联分享,尊重版权,转载请以链接形式标明本文地址;
本文标签:

扫描二维码,在手机上阅读
上一篇::au3 正则参考 -53-条件判断捕获组
下一篇:au3 正则参考 -51-普通捕获组

热门文章

相关文章

  • Au3-API教程
  • au3 正则参考 -15-定位点
  • au3 正则参考 -51-普通捕获组
  • au3 正则参考 -11-空白字符
  • au3 正则参考 -05-负字符组
取消回复

发表评论

亲,头像对么?

18 + 67 =

提交中,请稍候……


木有头像就木JJ啦!还木有头像吗?点这里申请属于你的个性Gravatar头像吧!


    站点统计
    • 运行时间: 20254 天
    • 日志总数: 365 篇
    • 评论数量: 7238 条
    • 微语数量: 6 条
    • 附件总量: 388 件
  • 逝出的青春

  • 打赏"绿色风"



      扫码关注本站公众号 可搜本站内容

  • Autoit V3 脚本交流群

      常驻群1:905774875
      常驻群2:40672266


  • 链接

    • AU3中文论坛
    • Excel资料库
    • 完美者博客
    • 顺网小哥'S Blog
    • 猛牛哥的博客
    • 网吧系统下载
  • 分类

    • 流●年(66)
    • 笔●记(0)
    • 脚●本(0)
    • 作品(21)
    • 学习随记(51)
    • 源码示例(68)
    • UDF(收集)(26)
    • 工作室UDF(30)
    • 工具●教程(62)
    • 教程之GDI(24)
Copyright © 2013 绿色风's Blog. Powered by emlog. Theme by 射雕天龙. 鄂ICP备2021011689号-1 鄂公网安备42102302000078号 sitemap