2017-05-30 57 views
1

我的程序会读取提取的日志文件的一部分,这将类似于以下

模式在日志中匹配查询次数

2017-05-30 14:33:43,876 INFO [SSHD-TRANSFER-1] com.tumbleweed.st.server.sshd.AuthenticationProviderImpl - SSH: Failed login attempt on [172.16.8.1]. Username: "rene1". 



但是这不是我需要的所有东西进一步处理。我只对172.16.8.1感兴趣,我将其写入文本文件。因为我只需要那些不同的IP地址。我可以知道我需要设置哪种类型的模式才能使其有效。我已经设置了模式,但它见过这样都不尽如人意

这是我的正则表达式Pattern pat1 = Pattern.compile("(?<=[)[\\d.]+.");

+1

试试这个:'(?<= \\ [] [\\ d。] +(?= \\])''。演示[这里](https://regex101.com/r/lyPfde/1) – degant

回答

1

您可以使用一个表达式模式:\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b寻找一个IP地址。

+0

有一个副作用 - 这个正则表达式选择所有的数字。因此,IP代码999.999.999.999也将被选中。 –

0

您可以使用此正则表达式来匹配您的IP地址:

private static final String IPADDRESS_PATTERN 
     = "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." 
     + "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." 
     + "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." 
     + "([01]?\\d\\d?|2[0-4]\\d|25[0-5])"; 

public static void main(String[] args) { 
    String str = "2017-05-30 14:33:43,876 INFO [SSHD-TRANSFER-1] com.tumbleweed.st.server.sshd.AuthenticationProviderImpl - SSH: Failed login attempt on [172.16.8.1]. Username: \"rene1\"."; 

    Pattern p = Pattern.compile(IPADDRESS_PATTERN); 
    Matcher m = p.matcher(str); 
    while (m.find()) { 
     System.out.println(m.group()); 
    } 
} 

输出

172.16.8.1 

你可以看看关于这里的正则表达式How to validate IP address with regular expression