簡體   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