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

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

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

<!DOCTYPE html> 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://www.jianyiit.com/post-224.html

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

扫描二维码,在手机上阅读
上一篇::au3 正则参考 -80-表达式的递归匹配
下一篇:au3 正则参考 -71-回溯控制

热门文章

相关文章

  • au3 正则参考 -12 非空白字符
  • au3 正则参考 -04-正字符组
  • au3 正则参考 -62-正回顾后发断言
  • SQL强化练习入门学习工具
  • au3 正则参考 -01-工作方式
取消回复

发表评论

亲,头像对么?

24 + 23 =

提交中,请稍候……


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


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