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

au3 正则参考 -62-正回顾后发断言

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

<!DOCTYPE html> RegExp

正回顾后发断言: (?<=断言模式)

断言模式为任何正则表达式模式. 若要成功匹配, 则断言模式匹配项不得在输入字符串当前位置左侧出现, 尽管断言模式的匹配结果不会包含在最终匹配结果中.

断言模式为 0 宽度断言, 不会回溯. 回顾后发断言匹配时向左搜索断言模式.

正回顾后发断言通常在正则表达式的开头使用. 断言模式只是一个匹配的前提条件, 它不是匹配结果的一部分.

 

下面的示例匹配 21 世纪年份的最后两个数字(也就是说, 数字 20 要在匹配字符串之前).

字符串: 2010 1999 1861 2140 2009

表达式: (?<=\b20)\d{2}\b

匹配结果(标志 3) : [0]10     [1]09

表达式分析:

模式 说明
\d{2} 匹配两个十进制数字. 如果断言模式成功匹配, 则继续匹配 2 个数字 .
(?<=\b20) 正回顾后发断言. 如果两个十进制数字的左侧边界以 20 开头, 则匹配失败, 继续寻找匹配. 断言匹配条件 -- 匹配的字符串必须以 20 开头 .
\b 在单词边界处结束匹配. 如果 \d{2} 成功匹配 , 则在 \d{2} 的结束边界处结束匹配 .

 

下面示例正则表达式 (UCP)(?<=\d){1,2}\s\w+,?\s\d{4} 使用回顾后发断言测试月份名称前面的日期; 然后该正则表达式匹配月份和年份

字符串: "1 五月 1917", "六月 16, 2003"

表达式: (UCP)(?<=\d){1,2}\s\w+,?\s\d{4}

匹配结果(标志 1, 或 2, 或 3):      [0] 五月 1917
"六月 16, 2003" 因其开头不是十进制数字 , 所有不能匹配 .

表达式分析:

模式 说明
(*UCP) 启动 Unicode 类别属性(UCP)支持, 匹配中文字符串.
(?<=\d) 正回顾后发断言. 匹配项的开头必须为十进制数字.
{1,2} 匹配前项捕获值 1 到 2 次.
\s 匹配空白字符.
w+,? 匹配一个或多个单词字符.
\s 匹配空白字符.
\d{4} 匹配 4 个十进制数字.

 

字符串 : Windows 2003

表达式 : (?<=Windows\s)\d+

匹配结果(标志 1, 或 2, 或 3) :      [0]2003
说明 : \d+ 表示匹配一个以上的数字, 而 (?<=Windows\s) 相当于一个附加条件, 表示所在位置左侧必须为断言模式 Windows\s , 这个匹配的内容不计入匹配结果.
这个正则表达式在匹配字符串 Office 2003 时匹配失败, 因为这里任意一串数字子串的左侧都没有断言模式 Windows\s .

正回顾后发断言匹配过程

字符串 :

a test

表达式 : (?<=

)[^<]+(?=
)

这个正则的意义就是匹配

和
标签之间的内容, 而不包括
和
标签本身.

匹配过程 :

1. 首先由正回顾后发断言 (?<=

) 取得控制权, 从位置 0 开始匹配, 由于位置 0 是起始位置, 左侧没有任何内容, 所以
必然匹配失败, 从而正回顾后发断言 (?<=
) 匹配失败, 导致整个表达式在位置 0 处匹配失败. 第一轮迭代匹配失败, 正则引擎向前传动, 由位置 1 处开始尝试第二次迭代匹配.

2. 直到传动到位置 5, (?<=

) 取得控制权, 向左查找 5 个位置, 由位置 0 开始匹配, 由
匹配
成功, 从而 (?<=
) 匹配成功, 匹配的结果为位置 5, 控制权交给 [^<]+ 从位置 5 开始尝试匹配, 尝试匹配文本 a test .

3. 控制权交给正预测先行断言 (?=

)
, 匹配
成功, 从而 (?=
)
匹配成功, 匹配结果为位置 11.

此时正则表达式匹配成功完成. 匹配结果为 a test , 开始位置为 5, 结束位置为 11. 其中 (?<=

) 匹配位置 5, [^<]+ 匹配 a test , (?=
) 匹配位置 11.

负回顾后发断言 (?<!断言表达式) 的匹配过程与上述过程类似, 区别只是当断言模式匹配失败时, 负回顾后发断言 (?<!断言表达式) 才匹配成功.

正回顾后发断言的特殊处在于, 它相当于在当前位置左侧附加一个条件, 所以它不是在当前位置开始尝试匹配的, 而是从当前位置左侧某一位置开始, 匹配到当前位置为止, 报告匹配成功或失败.






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

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

扫描二维码,在手机上阅读
上一篇::au3 正则参考 -63-负回顾后发断言
下一篇:au3 正则参考 -61-正预测先行断言

热门文章

相关文章

  • au3 正则参考 -34-量词限定符
  • au3 正则参考 -05-负字符组
  • au3 正则参考 -15-定位点
  • AutoIt 正则表达式参考与学习[序]
  • au3 正则参考 -45-表达式注释
取消回复

发表评论

亲,头像对么?

16 + 51 =

提交中,请稍候……


木有头像就木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