在以下格式的syslog字符串中,我想每次在/
和(
之间出现第二次出现的字符时:
<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用作正则表达式的一部分,名称是动态的。
谢谢
答案 0 :(得分:1)
如果您使用环视,那么您将在正则表达式中获得所有可能的匹配项,因为环视不会消耗字符。如果您想跳过匹配第一个IP的地址,则可以在正则表达式之前使用.*
而不是正面向后看,并使用此正则表达式并捕获来自group1的第二个IP,
.*\/(.*?)(?=\()
在这里,.*\/
以贪婪的方式捕获任何字符,后跟原义词/
,并在您要匹配的模式的最后一次出现时停止,并捕获/
之后和之前的所有数据(
,并为您提供第二次IP