模式匹配查询日志中的数字

时间:2017-05-30 13:13:45

标签: java regex

我的程序将读取提取的日志文件的一部分,如下所示<

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.]+.");

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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