繁体   English   中英

是否需要有关使用非捕获组的Grok模式的信息(?:)

[英]Need information on Grok patterns that use non capturing group (?: )

我了解使用捕获组和非捕获组编写正则表达式的概念。

例如:

a(b|c)将匹配并捕获abac

a(?:b|c)将匹配abac但捕获a

但是,当我制作一个新的自定义grok模式时它有什么用,以及使用非捕获组的含义是什么。

在下面的HOUR中查看一些现有的grok模式:

HOUR (?:2[0123]|[01]?[0-9])

在这里,我们也可以使用(2[0123]|[01]?[0-9])来匹配小时格式。 是什么使grok模式在这里使用非捕获表达式? 基于什么参数,我应该决定使用此(?:subex)

具有捕获组的模式与不具有Grok的模式之间的区别在于是否需要创建字段。

(?:2[0123]|[01]?[0-9])模式包含一个非捕获组,该组仅用于对子模式序列进行分组 (2[0123]|[01]?[0-9])正则表达式包含一个编号的捕获组 ,该捕获组匹配并捕获该值(=存储在ID等于模式中捕获组顺序的某些其他缓冲区中) 。 请注意,还有命名捕获组 ,例如(?<field>2[0123]|[01]?[0-9])会将捕获的值分配给命名组。

named_captures_only参数设置为false时a(b|c)正则表达式将匹配abac并将bc分配给单独的字段。 当您使用非捕获组 a(?:b|c) ,将不会创建任何字段,只会匹配此文本。

由于named_captures_only参数的默认值为True ,因此在Grok模式中已删除编号的捕获组或未捕获组之间的差异。 因此,默认情况下只能使用命名捕获(如a(?<myfield>b|c) )创建字段。

我认为,优先选择普通Grok模式中的非捕获组,以便不依赖named_captures_only参数设置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM