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

au3 正则参考 -53-条件判断捕获组

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

<!DOCTYPE html> RegExp

条件判断捕获组 (?(?=条件模式)yes 模式|no 模式) 或 (?(name)yes 模式|no 模式)

对于(?(?=条件模式)yes|no) , 如果条件表达式 (?=条件模式) 匹配成功, 则匹配 yes 子表达式, 否则匹配 no 子表达式.

对于 (?(name)yes|no) , 如果命名捕获组 name 有捕获, 则匹配 yes 子表达式, 否则匹配 no 子表达式.

如果 条件模式 与可能出现的命名捕获组的组名相同, 为避免混淆, 可以采用 (?(?=条件模式)yes|no) 方式显示声明 条件模式 为子表达式, 而不是捕获组名.

(?(?=条件模式)yes|no) 验证当前位置右侧是否能够匹配 条件模式 , 属于顺序断言结构, 是零宽度的, 所以它只参与判断, 即使匹配成功, 也不会占有字符.

 

下表录入 AutoIt 帮助 StringRegExp() 函数文档的相关描述:

其中 (条件模式) 可以是任何以下形式:

(n) 测试捕获组是否与绝对数 n 匹配.
(+n) 测试捕获组是否与相对数 +n 匹配.
(-n) 测试捕获组是否与相对数 -n 匹配.
() 测试捕获组是否与名称 name 匹配
(R) 测试捕获组是否发生任何种类的递归.
(Rn) 测试捕获组最近递归是否为绝对数 n.
(R&name) 测试捕获组最近递归名称是否为 name.
(DEFINE) 如果省略 no 子模式, 允许使用其它地方定义的子程序.
"(?x) (?(DEFINE) (? 2[0-4]\d | 25[0-5] | 1\d\d | [1-9]?\d) )" 定义名为 "byte" 的子程序, 匹配一个 IPv4 地址的任何组成部分.
实际地址可由 "\b (?&byte) (.(?&byte)){3} \b" 匹配.
(assertion) 断言为正数或负数, 断言为预取或后处理之一.

 

捕获组的条件判断计算: (?(条件模式)yes| no ) 和 (?(name)yes| no ),

其中条件模式是要匹配的子表达式, name 是捕获组的名称; yes 是当条件模式, 或 name 匹配成功时要匹配的字符串; 而 no 是当条件模式, 或 name 匹配无效时要匹配的子表达式.

此功能允许引擎根据前面的条件模式匹配的结果, 或零宽度断言的结果, 使用多个替换模式进行搜索. 这提供了超越反向引用所允许的, 更为强大的功能.

下面的示例中的正则表达式匹配输入文本中供公用和内部使用的段落. 仅供内部使用的段落以 标记开始.

正则表达式模式 (?m)^(?\<PRIVATE>\s)?(?(Pvt)((\w+\p{P}?\s)+)|((\w+\p{P}?\s)+))\r?$ 使用条件计算向单独捕获组分配公用和内部使用的段落内容, 然后可以按不同方式处理这些段落.

字符串:
This is not for public consumption.
But this is for public consumption.
Again, this is confidential. ; 注意: 此句后面需要回车换行 !

匹配结果(标志 3):
[0]
[1]This is not for public consumption.
[2]consumption.
[3]
[4]
[5]
[6]But this is for public consumption.
[7]consumption.

[8]
[9]Again, this is confidential.
[10]confidential.

表达式分析:

模式 说明
(?m) 使用多行模式, 其中 ^ 和 $ 匹配每行的开头和末尾(不是输入字符串的开头和末尾). 有关更多信息, 请参见单行与多行模式.
^ 从行的开头开始匹配.
(?\<PRIVATE>\s)? 匹配后跟空格字符的字符串 的 0 个或 1 个匹配项. 将匹配项分配给名为 Pvt 的捕获组.
(?(Pvt)((\w+\p{P}?\s)+) 如果 Pvt 捕获组存在, 则匹配一个或多个以下模式: 一个或多个单词字符, 后跟零个或一个标点分隔符, 再后跟一个空格字符.
将子字符串分配给第一个捕获组.
| yes 与 no 的子模式分隔符
((\w+\p{P}?\s)+)) 如果 Pvt 捕获组不存在, 则匹配一个或多个以下模式: 一个或多个单词字符, 后跟零个或一个标点分隔符, 再后跟一个空格字符.
将子字符串分配给第三个捕获组.
\r?$ 匹配行尾或字符串的结尾.

 

示例:

字符串: abc

表达式: (?(?=a)\w{2}|\w)

匹配结果(标志 1 或 2): [0]ab

模式 说明
(?(?=a)\w{2}|\w) 条件判断捕获组, 当前位置右侧如果是字符 " a ", 则整体表达式匹配两个 \w , 否则匹配一个 \w
(?(?=a) 条件表达式, 指定当前位置右侧字符为 a
\w{2} yes 子表达式, 如果条件成立, 则整体表达式匹配两个 \w ( 2 个字母字符)
|\w) no 子表达式 , 否则匹配一个 \w (字符串的第 1 个字母字符)

另一示例参阅可选构造中的条件匹配的表达式.






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

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

扫描二维码,在手机上阅读
上一篇::au3 正则参考 -55-普通组与命名组混合编号规则
下一篇:au3 正则参考 -52-命名捕获组

热门文章

相关文章

  • AutoIt 正则表达式参考与学习[序]
  • au3 正则参考 -03-字符类
  • au3 正则参考 -58-可选构造
  • au3 正则参考 -22-连续匹配
  • au3 正则参考 -36-量词限定符
取消回复

发表评论

亲,头像对么?

75 + 58 =

提交中,请稍候……


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


    站点统计
    • 运行时间: 20254 天
    • 日志总数: 365 篇
    • 评论数量: 7237 条
    • 微语数量: 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