如何在一个捕获组中使用正则表达式提取完整事件
How to extract complete event using regex in one capturing group
我有以下事件,我正试图从中提取“loc”字段
loc=/abc/flows/timespan/2021-08-10T11:35:00+00:00_2021-08-10T12:35:00+00:00/ip_initiate/10.101.10.20/data.ext
loc=\"{\"type\":1,\"namespace\":\"flows\",\"appIds\":\"10,11,12\",\"path_bar\":\"[\\"ip_initiate=10.1.120.11\\"]\",\"2021-08-10T11:35:00+00:00_2021-08-10T12:35:00+00:00\/ip_initiate\/10.1.120.11\/http_code\/200\",\"restrict\":null}\"", day=xyz
loc=\"{\"type\":1,\"namespace\":\"flows\",\"appIds\":\"10,11,12\",\"path_bar\":\"[\\"ip_initiate=10.1.120.11\\"]\",\"2021-08-10T11:35:00+00:00_2021-08-10T12:35:00+00:00\/ip_initiate\/10.1.120.11\/http_code\/200\",\"restrict\":null}\"", ip=10.10.10.10
loc=\"/timespan/2021-09-12T14:21:00/ip_responder/10.10.10.10/,country=xyz,dns=example.com,http:code=2548:111:0:0:0:0:182.25.236.2:10\"
我能够使用多个捕获组使用以下正则表达式成功提取它 -
(loc=(.*),\s)|(loc=(.*?)$)
https://regex101.com/r/dyWR2g/1
我想知道是否可以在一组中提取完整的“loc”字段,如果可以,那么我需要在上面的正则表达式中进行哪些更改。
基本上我不想在我的正则表达式中使用竖线 (|)。
提前致谢
您可以将 ,\s 和 $ 放在自己的组中,用 | 分隔如果您不想要不同的组号。
loc 的值现在在捕获组 1 中。
loc=(.*?)(?:,\s|$)
模式匹配:
loc=
字面匹配
(.*?)
捕获组1,尽可能少匹配
(?:,\s|$)
非捕获组,匹配 , 和一个空白字符或字符串结尾
没有 |完全没有字符,你可以使用
loc=((?:(?!\s,).)*)
我有以下事件,我正试图从中提取“loc”字段
loc=/abc/flows/timespan/2021-08-10T11:35:00+00:00_2021-08-10T12:35:00+00:00/ip_initiate/10.101.10.20/data.ext
loc=\"{\"type\":1,\"namespace\":\"flows\",\"appIds\":\"10,11,12\",\"path_bar\":\"[\\"ip_initiate=10.1.120.11\\"]\",\"2021-08-10T11:35:00+00:00_2021-08-10T12:35:00+00:00\/ip_initiate\/10.1.120.11\/http_code\/200\",\"restrict\":null}\"", day=xyz
loc=\"{\"type\":1,\"namespace\":\"flows\",\"appIds\":\"10,11,12\",\"path_bar\":\"[\\"ip_initiate=10.1.120.11\\"]\",\"2021-08-10T11:35:00+00:00_2021-08-10T12:35:00+00:00\/ip_initiate\/10.1.120.11\/http_code\/200\",\"restrict\":null}\"", ip=10.10.10.10
loc=\"/timespan/2021-09-12T14:21:00/ip_responder/10.10.10.10/,country=xyz,dns=example.com,http:code=2548:111:0:0:0:0:182.25.236.2:10\"
我能够使用多个捕获组使用以下正则表达式成功提取它 -
(loc=(.*),\s)|(loc=(.*?)$)
https://regex101.com/r/dyWR2g/1
我想知道是否可以在一组中提取完整的“loc”字段,如果可以,那么我需要在上面的正则表达式中进行哪些更改。
基本上我不想在我的正则表达式中使用竖线 (|)。
提前致谢
您可以将 ,\s 和 $ 放在自己的组中,用 | 分隔如果您不想要不同的组号。
loc 的值现在在捕获组 1 中。
loc=(.*?)(?:,\s|$)
模式匹配:
loc=
字面匹配(.*?)
捕获组1,尽可能少匹配(?:,\s|$)
非捕获组,匹配 , 和一个空白字符或字符串结尾
没有 |完全没有字符,你可以使用
loc=((?:(?!\s,).)*)