使用正则表达式解析日志的问题

时间:2015-11-20 14:14:51

标签: regex

我尝试使用正则表达式分离wowza日志进行数据分析,但我无法将下面的部分分开。

我需要一个满足两种日志格式的 SINGLE正则表达式

格式1:

live wowz://test1.example.com:443/live/_definst_/demo01|wowz://test2.example.com:443/live/_definst_/demo01 test

格式2:

live demo01 test

我正在尝试拆分3个参数的行,并在appstreamnameid组中捕获它们,但streamname应仅捕获后的文本最后/

这是我尝试过的:

(?<stream_name>[^/]+)$ - &gt;使用这种模式我只能分离格式1&#34; wowz&#34;部分。不是上面提到的完整格式1示例。

预期产出

{

"app": [
    [
        "live"
    ]
],
"streamname": [
    [
        "demo1"
    ]
],
"id": [
    [
        "test"
    ]
]

}

1 个答案:

答案 0 :(得分:2)

您可以使用以下正则表达式来实现您指定的内容:

^(?<app>\S+) (?:\S*/)?(?<streamname>\S+) (?<id>\S+)$

regex101 demo

  • \S+匹配除空格之外的任意数量的字符。

  • (?:\S*/)?可选择使用第二个参数中的字符,直至最后/。这不包括在组中,因此不会被捕获。