绿色风's Blog
澳门的百家乐|专注AutoIT(Au3)
  • 首页
  • 流●年
  • 笔●记
    • 学习随记
    • 源码示例
  • 脚●本
    • UDF(收集)
    • 工作室UDF
    • 工具●教程
    • 教程之GDI
  • 微●语
  • 作●品
  • 下●载
  • 关于我
3月302016

au3 正则参考 -72-非回溯子表达式

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

非回溯子表达式 (?>子表达式 )

非回溯子表达式也称为一个贪婪的子表达式, 子表达式为任何有效的正则表达式模式.

通常, 如果正则表达式包含一个可选匹配模式, 并且可选模式不成功的话, 正则表达式引擎可以在多个方向上分支, 以将输入的字符串与某种模式进行匹配. 如果未找到第一个分支的匹配项, 则正则表达式引擎可以使用备份的第一个匹配项的点, 并尝试使用第二个分支的匹配项. 此过程可继续进行, 直到尝试所有分支. 这就是回溯

(?>子表达式 ) 禁用回溯. 正则表达式引擎将在输入字符串中匹配尽可能多的字符. 在没有任何进一步匹配可用时, 它将不回溯尝试可选模式匹配. (也就是说, 非回溯仅仅匹配由非回溯子表达式匹配的字符串; 不会尝试匹配与基于该子表达式其后跟随的任何该子表达式. )

如果你知道回溯不会成功, 则建议使用此选项. 防止正则表达式引擎执行不需要的搜索, 以提高搜索性能.

 

下面的示例回溯与非回溯如何修改模式匹配的结果. 回溯能匹配单词边界后的一系列重复(相同)字符, 但非回溯则不会匹配.

字符串: cccd, aaad, aaaa

回溯表达式: (\w)\1+.\b

匹配结果(标志 4):
[0]=> [0]cccd
[1]=> [0]aaad
[2]=> [0]aaaa      -- 回溯匹配的结果, 非回溯表达式则不会匹配.

非回溯表达式: (?>(\w)\1+).\b

匹配结果(标志 4):
[0]=> [0]cccd
[1]=> [0]aaad

表达式分析:

模式 说明
(?>(\w)\1+) 非回溯定义. 匹配一个或多个有重复字符的单词, 但不执行回溯 ( 不匹配单词边界上的最后一个单词 aaaa ).
(\w) 匹配一个单词字符. 重复匹配到单词边界结束一个匹配过程 .
\1+ 一次或多次匹配 (\w) 捕获的子字符值. 并保存到捕获组 \1 .
. 匹配任意字符.
\b 在单词边界处结束匹配.

 

以下示例分别使用 2 个正则表达式模式匹配方法显示匹配信息.

第一个方法调用 \b\(?((\w+),?\s?)+[\.!?]\)? 使用有关已捕获的子字符串的信息完全填充捕获收集和集合对象.

第二个方法使用 \b\(?((?>\w+),?\s?)+[\.!?]\)? 设置非回溯的捕获调用, 所以它不会捕获有关组的信息.

字符串: This is the first sentence. Is it the beginning of a literary masterpiece? I think not. Instead, it is a nonsensical paragraph

回溯表达式: \b\(?((\w+),?\s?)+[\.!?]\)?

匹配结果(标志 4): 返回 12 项
[0]=> [0]This is the first sentence!
[0]=> [1]sentence
[0]=> [2]sentence                非回溯表达式不会匹配.
[1]=> [0]Is it the beginning of a literary masterpiece?
[1]=> [1]masterpiece
[1]=> [2]masterpiece          非回溯表达式不会匹配.
[2]=> [0]I think not.
[2]=> [1]not
[2]=> [2]not                      非回溯表达式不会匹配.
[3]=> [0]Instead, it is a nonsensical paragraph.
[3]=> [1]paragraph
[3]=> [2]paragraph          非回溯表达式不会匹配.

 

非回溯表达式: \b\(?((?>\w+),?\s?)+[\.!?]\)?

匹配结果(标志 4): 返回 8 项
[0]=> [0]This is the first sentence!
[0]=> [1]sentence
[1]=> [0]Is it the beginning of a literary masterpiece?
[1]=> [1]masterpiece
[2]=> [0]I think not.
[2]=> [1]not
[3]=> [0]Instead, it is a nonsensical paragraph.
[3]=> [1]paragraph

非回溯表达式分析:

模式 子模式 说明
\b   在单词边界处开始.
\(?   匹配左括号 “(” 的零或一个匹配项. 源字符串没有 ( 符号, 但测试添加一个 ( 符号, 也不能返回匹配 ?
((?>\w+),?\s?)+   非回溯定义 (?> . 一次或多次匹配以下子模式的匹配组合.
  (?>\w+),? 匹配一个或多个单词字符, 后跟零或一个逗号. 当匹配单词字符不回溯
  \s? 匹配零个或一个空白字符.
[\.!?]\)?   与后无右括号或三个标点符号 . ! ? 中的一个后跟一个右括号 “)” 的匹配




本文固定链接: http://elebm.com/post-224.html

blogger
该日志由 绿色风 于2016-3-30 19:27 Wednesday发表在 工具●教程 分类下。
版权所有:《绿色风's Blog》 → 《au3 正则参考 -72-非回溯子表达式》;
除特别标注,本博客所有文章均为原创. 互联分享,尊重版权,转载请以链接形式标明本文地址;
本文标签:
et_highlighter51
上一篇::au3 正则参考 -80-表达式的递归匹配
下一篇:au3 正则参考 -71-回溯控制

热门文章

  • 显示器亮度,对比度,色温缩放调节,笔记本亮度调节
  • 显示器 EDID 读取,生产日期和分辨率
  • 字符串打乱顺序
  • 简单的文本替换伪原则工具
  • Au3中仿高阶函数的使用示例

相关文章

  • au3 正则参考 -30-限定符
  • au3 正则参考 -41-不区分大小写
  • au3 正则参考 -11-空白字符
  • au3 正则参考 -14-非数字字符
  • au3 正则参考 -19-字符串尾
取消回复

发表评论

亲,头像对么?

70 + 14 =

提交中,请稍候……


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


    站点统计
    • 日志总数: 302 篇
    • 评论数量: 91 条
    • 微语数量: 40 条
    • 附件总量: 305 件
  • 打赏"绿色风"



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

  • Autoit V3 脚本交流群

      常驻群1:477266297
      常驻群2:40672266


  • 标签

      QQ UDF IP 吐嘈 AU3 Enum 枚举常量 AU3小技巧 数组 进度条 对象 删除重复行 趣图 Hex 获取网络时间 swf UTC 日期 时间 POST 三目运算 三元判断 小技巧 GDI 收款 SQL 工具 映像 MV 劫持 API 教程 CHM 按键 GDI教程 杯举 按时间 笑一笑 2014 网络用语 2015 免费 元宵 视图 listview au3示例 美女 壁纸 游戏 差异加密 加密 串口 WebAPI IE TTS 环境yo 过去 验证码 图片分割 VBS HiFi Mp3 免费空间 QQchat 机器人 win10 电影 彩票 入门教程 帮助文档 事件 编码 CMD MD5 打赏 翻译 作品 下载 多线程 ListViewRead 赞助 鼠标 窗口尺寸 分享 汇编注入 干货 复制 移动 gizp 乐一乐 正则 autoit wav波形文件 播放 authcode 鼠标HOOK 键盘HOOK 剪切板 复制图片 文件遍历 JDK 网卡 GetAdaptersInfo 内存 CPU 转码
  • 链接

    • AU3中文论坛
    • 易捷博客
    • 简爱博客
    • 胡言乱语-小胡老师
    • 又淘气.我的世界
    • 御坂网络
    • 大师兄U盘装系统
    • 顺网小哥'S Blog
    • 猛牛哥的博客
    • 墨涩颓废网
  • 存档

    • 2019年9月(1)
    • 2019年8月(1)
    • 2019年5月(2)
    • 2019年4月(2)
    • 2019年3月(3)
    • 2019年2月(1)
    • 2018年11月(1)
    • 2018年10月(1)
    • 2018年9月(3)
    • 2018年8月(4)
    • 2018年4月(2)
    • 2018年3月(1)
    • 2018年1月(6)
    • 2017年12月(1)
    • 2017年11月(8)
    • 2017年7月(2)
    • 2017年6月(1)
    • 2017年5月(2)
    • 2017年4月(8)
    • 2017年3月(2)
    • 2017年2月(3)
    • 2017年1月(3)
    • 2016年12月(5)
    • 2016年11月(1)
    • 2016年10月(1)
    • 2016年9月(2)
    • 2016年8月(2)
    • 2016年7月(4)
    • 2016年6月(3)
    • 2016年5月(2)
    • 2016年4月(3)
    • 2016年3月(58)
    • 2016年1月(6)
    • 2015年12月(7)
    • 2015年11月(3)
    • 2015年10月(10)
    • 2015年9月(9)
    • 2015年8月(11)
    • 2015年7月(11)
    • 2015年6月(1)
    • 2015年5月(6)
    • 2015年4月(14)
    • 2015年3月(9)
    • 2015年2月(6)
    • 2015年1月(12)
    • 2014年12月(19)
    • 2014年11月(18)
    • 2014年10月(12)
Copyright © 2013 绿色风's Blog. Powered by emlog. Theme by 射雕天龙. 鄂ICP备15002104号-1 sitemap