au3 正则参考 -56-非捕获组
<!DOCTYPE html>
非捕获组: (?:子表达式)
非捕获组不会捕获由子表达式匹配的子字符串, 子表达式为任何有效正则表达式模式. 当限定符应用到捕获组, 如果组捕获的子字符串并非所需时, 通常会使用非捕获组构造.
如果正则表达式包含嵌套的分组构造, 则外部非捕获组构造不适用于内部嵌套组构造.
可以通过以下方式之一使用非捕获组:
使用 (?:子表达式) 语言元素. 此元素可防止应用组中捕获匹配的子字符串. 但它不在任何嵌套的组中禁用子字符串捕获.
在正则表达式模式中禁用所有未命名或隐式捕获. 使用此选项时, 只能捕获使用 (?
下面示例捕获组与非捕获组的最终匹配结果的区别, 两个正则表达式都用于捕获整个句子:
字符串: This is one sentence. This is another.
捕获组表达式: \b(\w+[;,]?\s?)+[.?!]
匹配结果(标志 4):
[0]=> [0]This is one sentence.
[0]=> [1]sentence
[1]=> [0]This is another.
[1]=> [1]another
查找匹配时, 捕获分组 ([0]=> [0], [1]=> [0]) 和捕获对象 ([0]=> [1] , [1]=> [1]) 都将用捕获内容来填充.
此时对捕获组 (\w+[;,]?\s?) 应用 + 限定符, 从而使得正则表达式模式可与句子中的每个单词匹配. 否则它将匹配句子中的最后一个单词.
当你对子表达式应用限定符, 并且对捕获的单词 ([0]=> [1] , [1]=> [1]) 不感兴趣时, 应禁用组捕获, (?:子表达式) 语言元素可避免捕获你不感兴趣.
非捕获组表达式: \b(?:\w+[;,]?\s?)+[.?!]
匹配结果(标志 4):
[0]=> [0]This is one sentence.
[1]=> [0]This is another.
表达式分析:
模式 | 子模式 | 说明 |
---|---|---|
\b | 在单词边界处开始匹配. | |
(?: | 定义 (\w+[;,]?\s?) 为非捕获组 , 不捕获句子字符串中后跟标点符号单词 . | |
(\w+[;,]?\s?)+ | 匹配 1 或多个以下子表达式捕获的组合. 匹配结果用于定义第一个捕获组, 这是必需的, 以便匹配后跟可选标点符号的单词字符, 直至正则表达式引擎到达句子末尾. | |
\w+ | 匹配一个或多个单词字符. | |
[;,]? | 匹配 0 个或 1 个(单词后跟的)逗号, 或分号 | |
\s? | 匹配 0 个或 1 个(逗号, 或分号后跟的)空白字符 | |
[.?!] | 匹配 1 个句号, 或 1 个问号, 或 1 个感叹号. |
下面的示例包括非捕获组的正则表达式. 请注意输出不包含任何已捕获组( 即没有匹配单词的捕获组 ):
字符串: This is a short sentence.
表达式: (?:\b(?:\w+)\W)+.
匹配结果(标志 1, 或 2, 或 3, 或 4): This is a short sentence.
正则表达式 (?:\b(?:\w+)\W)+. 匹配由句号终止的语句. 因为正则表达式重点在句子, 而不是个别单词, 所以分组构造使用非捕获组模式, 以避免捕获单词字符.
模式 | 子模式 | 说明 |
---|---|---|
(?:\b(?:\w+)\W)+. | 非捕获组模式. 不将匹配的文本分配给捕获的组. 组内子模式分述如下: | |
(?: | 定义子表达式为非捕获组. | |
\b | 在单词边界处开始匹配. | |
(?:\w+) | 定义表达式为非捕获组. 匹配 1 个或多个单词字符, 不将匹配的文本分配给捕获组. | |
\W | 匹配 0 个或多个非单词字符. | |
. | 转义句点字符, 匹配句点本身. 并结束匹配过程 . |
发表评论
木有头像就木JJ啦!还木有头像吗?点这里申请属于你的个性Gravatar头像吧!