Regex 使用正则表达式解析特定日志?

Regex 使用正则表达式解析特定日志?,regex,Regex,日志示例是 DHCPRELEASE of 123.4.5.89 from 12:34:45:56:78:90 (Johns-Iphone) via eth1 relay 1.3.4.4 其中,123.4.5.89是ip地址,12:34:45:56:78:90是mac地址,Johns Iphone是主机 案例1-我希望这有否匹配组(缺少左括号) 案例2-这可以被解析 DHCPRELEASE of 123.4.5.89 from 12:34:45:56:78:90 (Johns-Iphone) v

日志示例是

DHCPRELEASE of 123.4.5.89 from 12:34:45:56:78:90 (Johns-Iphone) via eth1 relay 1.3.4.4
其中,
123.4.5.89
是ip地址,
12:34:45:56:78:90
是mac地址,
Johns Iphone
是主机

案例1-我希望这有匹配组(缺少左括号)

案例2-这可以被解析

DHCPRELEASE of 123.4.5.89 from 12:34:45:56:78:90 (Johns-Iphone) via eth1 relay 1.3.4.4
案例3-这也可以被解析

DHCPRELEASE of 123.4.5.89 from 12:34:45:56:78:90 via eth1 relay 1.3.4.4
DHCPRELEASE of 123.4.5.89 from 12:34:45:56:78:90
案例4-这也可以被解析

DHCPRELEASE of 123.4.5.89 from 12:34:45:56:78:90 via eth1 relay 1.3.4.4
DHCPRELEASE of 123.4.5.89 from 12:34:45:56:78:90
这里是我的正则表达式,用于解析这个特定的日志:

DHCPRELEASE\sof\s((?:[0-9]{1,3}\.){3}(?:[0-9]{1,3}))\sfrom\s((?:[a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2})(?:\s\((.*?)\))?
然而,我的正则表达式不能满足我的需要。有人能帮忙吗


谢谢

您可以使用此正则表达式:

DHCPRELEASE\sof\s((?:[0-9]{1,3}\.){3}(?:[0-9]{1,3}))\sfrom\s((?:[a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2})(?:\s\(([^)]*)\))?(?=\svia|$)
i、 e.在最后进行前瞻
(?=\svia)
,以确保不匹配的
(…)
与案例1不匹配

因为
(?:\s\(.*?\)?
是可选的,所以不强制括号匹配。 它只匹配子字符串

DHCPRELEASE of 123.4.5.89 from 12:34:45:56:78:90
忽略其他的

您可以将“via”附加到正则表达式以强制匹配到该点

编辑

更准确地说,您可以向正则表达式中添加开始和结束锚定,以便它匹配整行

比如说

^DHCPRELEASE\sof\s((?:[0-9]{1,3}\.){3}(?:[0-9]{1,3}))\sfrom\s((?:[a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2})(?:\s\((.*?)\))?( via eth1 relay.*)?$

将匹配整行,否则将不匹配。注意“^”匹配行首,“$”匹配行尾。

什么不起作用?@anubhava案例1不起作用,它实际上有匹配的组,可以解析。我不想那样。你想让案例1完全不匹配吗?@SvenHohenstein是的,我想让案例1完全不匹配谢谢你的想法。我的问题中的案例4(我刚刚编辑了我的问题)怎么样?可能吗?我希望解析器对它识别的内容非常详细。感谢您的输入1010。我在我的问题中添加了案例4——是否有可能让一个正则表达式适合我的所有案例?