2016-11-06 19 views
2

我试图建立一些日志文件来在神交模式我有一个日志信息的字段可以像以下两项:独立IPV4和IPV6使用正则表达式和神交解决

IP Address: (192.168.1.100), 
IP Address: (192.168.1.100, 2001:0db8:85a3:0000:0000:8a2e:0370:7334), 

与第一例子打交道是非常简单的,我定义称为IP2一个新的IP模式逃脱出来的括号\((?:%{IP})\)的和喜欢的东西最终会:

Example Core RegEx Patterns: 
IPV6 ((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)? 
IPV4 (?<![0-9])(?:(?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5]))(?![0-9]) 
IP (?:%{IPV6}|%{IPV4}) 
IP2 \((?:%{IP})\) 

Grok Pattern for Field: 
IP Address: %{IP2:ipv4_address}, 

我试图找出如何创建一个正则表达式模式和Grok模式wh显示IPv4和IPv6地址。如果始终生成IPv6字段,我会保持不变,如果它不存在,它就是空的。

+1

我认为您正在寻找'\(%IPV4:ipv4_address}(?:,\ s *%{IPV6:ipv6_address})?\)' –

+0

您是否按预期工作?如果丢失,IPV6字段将为空。 –

+0

太完美了!非常感谢! –

回答

2

你需要使用一个可选的组:

\(%{IPV4:ipv4_address}(?:,\s*%{IPV6:ipv6_address})?\) 
         ^^^      ^^ 

击穿

  • \( - 开放(
  • %{IPV4:ipv4_address} - IPV4模式
  • (?: - 一个可选的开始可以发生1次或0次的组
    • , - 逗号
    • \s* - 零个或多个空格
    • %{IPV6:ipv6_address} - IPV6图案
  • )? - 任选的组的端部(注意?是相匹配的量词1或量化子模式出现0次)
  • \) - 关闭)
+0

很高兴为你效劳。如果我的回答对你有帮助,请考虑接受答案并加注。 –