用正则表达式匹配第 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

Demo