如何在正则表达式中使组为 NULL
How to make a group NULL in regex
我想制作一个正则表达式,其中在一个日志中一组为 NULL
正则表达式
\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d.\d\d\dZ)\s+(INFO|WARN|DEBUG|ERROR|FATAL|TRACE)\s+(.*?.*?\-\s+.*?)\s(\[?.*?\]?)\s+(.*)
日志
2019-11-14T04:25:00.123Z WARN http-nio-127.0.0.1-7440-exec-127 CorfuCompileProxy - accessInner: Encountered a trim exception while accessing version 120383907 on attempt 0
2019-11-14T04:23:08.700Z INFO RpcManagerRequestCleanupTimer RpcManager - SYSTEM [nsx@6876 comp="nsx-manager" level="INFO" subcomp="manager"] Rpc response not received for application FabricStats request com.vmware.nsx.management.agg.messaging.AggService$ClientDataRequestMsg from client 8ac94189-d611-4eb3-9b93-c3c3a8e3d36a with correlation id 287e690e-0a47-4459-a0bb-be36fe439068 in 432000000 msec.
2019-11-14T04:24:04.072Z INFO MessagingObjectFactoryImpl-4-2 ExporterLastAckServiceImpl - - [nsx@6876 comp="nsx-manager" level="INFO" subcomp="manager"] Found exporter with elaId = Node#a3844284-e626-11e9-a87b-005056bcc0c6#AggSvc-L2-Bridging, returning lastAck = 16507
2019-11-14T04:23:08.362Z INFO ActivityEventRecovery-1 ActivityCacheManager - - [nsx@6876 comp="nsx-manager" level="INFO" subcomp="manager"] Handling activity 92d6a146-fa12-4889-a0ff-441087e047d0 completion event for 1
2019-11-14T04:23:08.362Z DEBUG ActivityEventRecovery-1 ActivityCacheManager - - [nsx@6876 comp="nsx-manager" level="INFO" subcomp="manager"] Handling activity 92d6a146-fa12-4889-a0ff-441087e047d0 completion event for 1
在上面的日志中,我希望第 4 组为 NULL,因为该日志不包含任何方括号。
我试了一段时间。这是 link - https://regex101.com/r/LJnVrS/93
请帮忙!
如果第 4 组必须存在并且内容必须以方括号开始或结束,您可以将组本身的内容设为可选。
要匹配以左侧的方括号开头或以右侧的方括号结尾,您可以使用 alternation:
((?:\S+\]|\[\S+)?)
(
捕获 第 4 组
(?:
非捕获组
\S+\]
匹配 1+ 个非空白字符和结尾 ]
|
或
\[\S+
匹配起始 [
和 1+ 个非空白字符
)?
关闭群组并设为可选
)
模式可能看起来像
(\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d\.\d{3}Z)\s+(INFO|WARN|DEBUG|ERROR|FATAL|TRACE)\s+((?:\S+\s+){4})((?:\S+\]|\[\S+)?)(.*)
如果所有行都从字符串的开头开始,您可以在模式前加上 ^
并使用多行标志添加。
请注意,您必须转义点才能按字面意思匹配它。
我想制作一个正则表达式,其中在一个日志中一组为 NULL
正则表达式
\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d.\d\d\dZ)\s+(INFO|WARN|DEBUG|ERROR|FATAL|TRACE)\s+(.*?.*?\-\s+.*?)\s(\[?.*?\]?)\s+(.*)
日志
2019-11-14T04:25:00.123Z WARN http-nio-127.0.0.1-7440-exec-127 CorfuCompileProxy - accessInner: Encountered a trim exception while accessing version 120383907 on attempt 0
2019-11-14T04:23:08.700Z INFO RpcManagerRequestCleanupTimer RpcManager - SYSTEM [nsx@6876 comp="nsx-manager" level="INFO" subcomp="manager"] Rpc response not received for application FabricStats request com.vmware.nsx.management.agg.messaging.AggService$ClientDataRequestMsg from client 8ac94189-d611-4eb3-9b93-c3c3a8e3d36a with correlation id 287e690e-0a47-4459-a0bb-be36fe439068 in 432000000 msec.
2019-11-14T04:24:04.072Z INFO MessagingObjectFactoryImpl-4-2 ExporterLastAckServiceImpl - - [nsx@6876 comp="nsx-manager" level="INFO" subcomp="manager"] Found exporter with elaId = Node#a3844284-e626-11e9-a87b-005056bcc0c6#AggSvc-L2-Bridging, returning lastAck = 16507
2019-11-14T04:23:08.362Z INFO ActivityEventRecovery-1 ActivityCacheManager - - [nsx@6876 comp="nsx-manager" level="INFO" subcomp="manager"] Handling activity 92d6a146-fa12-4889-a0ff-441087e047d0 completion event for 1
2019-11-14T04:23:08.362Z DEBUG ActivityEventRecovery-1 ActivityCacheManager - - [nsx@6876 comp="nsx-manager" level="INFO" subcomp="manager"] Handling activity 92d6a146-fa12-4889-a0ff-441087e047d0 completion event for 1
在上面的日志中,我希望第 4 组为 NULL,因为该日志不包含任何方括号。
我试了一段时间。这是 link - https://regex101.com/r/LJnVrS/93
请帮忙!
如果第 4 组必须存在并且内容必须以方括号开始或结束,您可以将组本身的内容设为可选。
要匹配以左侧的方括号开头或以右侧的方括号结尾,您可以使用 alternation:
((?:\S+\]|\[\S+)?)
(
捕获 第 4 组(?:
非捕获组\S+\]
匹配 1+ 个非空白字符和结尾]
|
或\[\S+
匹配起始[
和 1+ 个非空白字符
)?
关闭群组并设为可选
)
模式可能看起来像
(\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d\.\d{3}Z)\s+(INFO|WARN|DEBUG|ERROR|FATAL|TRACE)\s+((?:\S+\s+){4})((?:\S+\]|\[\S+)?)(.*)
如果所有行都从字符串的开头开始,您可以在模式前加上 ^
并使用多行标志添加。
请注意,您必须转义点才能按字面意思匹配它。