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——是否有可能让一个正则表达式适合我的所有案例?