[英]Need information on Grok patterns that use non capturing group (?: )
我了解使用捕獲組和非捕獲組編寫正則表達式的概念。
例如:
a(b|c)
將匹配並捕獲ab和ac
a(?:b|c)
將匹配ab和ac但捕獲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)
正則表達式將匹配ab
或ac
並將b
或c
分配給單獨的字段。 當您使用非捕獲組 a(?:b|c)
,將不會創建任何字段,只會匹配此文本。
由於named_captures_only
參數的默認值為True
,因此在Grok模式中已刪除編號的捕獲組或未捕獲組之間的差異。 因此,默認情況下只能使用命名捕獲(如a(?<myfield>b|c)
)創建字段。
我認為,優先選擇普通Grok模式中的非捕獲組,以便不依賴named_captures_only
參數設置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.