如何在一个捕获组中使用正则表达式提取完整事件

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|$) 非捕获组,匹配 , 和一个空白字符或字符串结尾

Regex demo

没有 |完全没有字符,你可以使用

loc=((?:(?!\s,).)*)

Regex demo