用正则表达式匹配第 2 次出现
Match 2nd occurrence with regex
在具有如下所示格式的系统日志字符串中,我希望每次第二次出现 /
和 (
之间的字符时获取:
<164>Feb 25 2019 17:25:31 FW-ATH : %ASA-4-106100: access-list foo_access_in denied tcp chicago/192.168.51.42(10050) -> new_york/192.168.65.71(59910) hit-cnt 1 first hit [0x3f890f86, 0x1a85d55c]
更准确地说,在这种情况下,我想获得 192.168.65.71
。
对于第一个内部 IP,我使用了下面的正则表达式,但我不知道如何格式化它以捕获第二个内部 IP
正则表达式:(?<=\/)(.*?)(?=\()
格式是 VLAN/IP_ADDRESS
所以,我不能使用 new_york 作为正则表达式的一部分,名称是动态的。
谢谢
如果您将使用环视,那么您将在正则表达式中获得所有可能的匹配项,因为环视不消耗字符。如果要跳过匹配第一个 IP,可以在正则表达式之前使用 .*
而不是正向后看,并使用此正则表达式并从 group1,
中捕获第二次出现的 IP
.*\/(.*?)(?=\()
在这里,.*\/
以贪婪的方式捕获任何字符,后跟文字 /
并在最后一次出现要匹配的模式时停止并捕获 /
之后的所有数据在 (
之前并给你第二次出现 IP
在具有如下所示格式的系统日志字符串中,我希望每次第二次出现 /
和 (
之间的字符时获取:
<164>Feb 25 2019 17:25:31 FW-ATH : %ASA-4-106100: access-list foo_access_in denied tcp chicago/192.168.51.42(10050) -> new_york/192.168.65.71(59910) hit-cnt 1 first hit [0x3f890f86, 0x1a85d55c]
更准确地说,在这种情况下,我想获得 192.168.65.71
。
对于第一个内部 IP,我使用了下面的正则表达式,但我不知道如何格式化它以捕获第二个内部 IP
正则表达式:(?<=\/)(.*?)(?=\()
格式是 VLAN/IP_ADDRESS
所以,我不能使用 new_york 作为正则表达式的一部分,名称是动态的。
谢谢
如果您将使用环视,那么您将在正则表达式中获得所有可能的匹配项,因为环视不消耗字符。如果要跳过匹配第一个 IP,可以在正则表达式之前使用 .*
而不是正向后看,并使用此正则表达式并从 group1,
.*\/(.*?)(?=\()
在这里,.*\/
以贪婪的方式捕获任何字符,后跟文字 /
并在最后一次出现要匹配的模式时停止并捕获 /
之后的所有数据在 (
之前并给你第二次出现 IP