au3 正则参考 -60-断言
<!DOCTYPE html>
位置定义
对于字符串 "a5" , 由两个字符 "a" 、 "5" 以及三个位置组成的, 这一点对于正则表达式的匹配原理理解很重要.
左右方向定义
正则表达式引擎尝试匹配输入字符串时, 按从左到右的顺序执行搜索. 因此字符串的左侧为顺序(正)方向 , 而右侧则为逆序(负)方向 .
断言
断言的作用相当于对所在位置加了一个附加条件, 只有满足这个条件, 断言模式才能匹配成功. 断言的难点在于找到这个"位置".
断言只进行断言模式的匹配, 不占有字符, 即匹配到的内容不保存到最终的匹配结果中, 是零宽度的. 断言匹配的最终结果就是一个位置.
断言按照方向划分有预测先行(顺序)断言和回顾后发(逆序)断言两种, 按照是否匹配有肯定(正)和否定(负)两种, 组合起来就有四种断言形式(见下表).
预测先行断言相当于在当前位置右侧附加一个条件, 而回顾后发断言相当于在当前位置左侧附加一个条件.
表达式 | 说明 |
---|---|
(?<=断言模式) | 正回顾后发断言 -- 所在位置左侧能够匹配断言模式. |
(?<!断言模式) | 负回顾后发断言 -- 所在位置左侧不能匹配断言模式. |
(?=断言模式) | 正预测先行断言 -- 所在位置右侧能够匹配断言模式. |
(?!断言模式) | 负预测先行断言 -- 所在位置右侧不能匹配断言模式. |
举例说明:
正回顾后发断言示例:
(?<=Windows )\d+ 在匹配 Windows 2003 时, 匹配结果为 “2003”. \d+ 表示匹配一个以上的数字, 而 (?<=Windows ) 相当于一个附加条件, 表示所在位置左侧必须为 "Windows ", 它所匹配的内容并不计入匹配结果. 同样的正则在匹配 Office 2003 时, 匹配失败, 因为这里任意一串数字子串的左侧都不是"Windows ".
正回顾后发断言示例:
(?<=\d{4})\w+ 在匹配 "1234abcdef" 时, 将匹配除前 4 个数字之外的其它剩余字符, 捕获匹配项的前面必须有 4 个十进制数字 .
正预测先行断言示例:
Windows (?=NT|XP) 在匹配 "Windows 98, Windows NT, Windows 2000" 时, 将只匹配 "Windows NT" 中的 "Windows ", 其它 "Windows " 字符后面都不符合"后跟 NT 或 XP" 的条件 因此都不被匹配.
负预测先行断言示例:
(?!1)\d+ 在匹配 "123" 时, 匹配结果为 "23". \d+ 匹配一个以上的数字, 但是附加条件 (?!1) 要求所在位置右侧不能是 1 , 所以匹配成功是从位置 1 开始, 匹配 "23" .
混合使用示例:
(?<=\d{4})\w+(?=\d{4}) 在匹配 "1234abcd3456" 时, 将匹配除了前 4 个数字和后 4 个数字之外的字母字符 abcd
发表评论
木有头像就木JJ啦!还木有头像吗?点这里申请属于你的个性Gravatar头像吧!