日志示例是
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-我希望它有无匹配组(缺少左括号)
DHCPRELEASE of 123.4.5.89 from 12:34:45:56:78:90 Johns-Iphone) via eth1 relay 1.3.4.4
案例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
案例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\((.*?)\))?
但是,我的regex做的是,而不是,这是我想要的。有人能帮忙吗?
谢谢!
发布于 2014-12-04 17:54:29
您可以使用这个regex:
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|$)
也就是说,最后要有一个前瞻性的(?=\svia)
,以确保不匹配的(...)
不匹配于案例1。
发布于 2014-12-04 17:57:14
因为(?:\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.*)?$
将与整条线匹配否则什么都不匹配。注:"^“与行首相匹配,"$”与末尾匹配。
https://stackoverflow.com/questions/27300361
复制相似问题