如何使用正则表达式从系统日志消息中提取程序名?我有一个 Java 流处理模块,它接受正则表达式来处理系统日志消息。
日志行可能是:
2013-10-14T22:05:29+00:00 hostname sshd[6359]: Connection closed by 192.168.1.10
2013-10-14T22:05:29+00:00 hostname sshd:3322 Connection closed by 192.168.1.10
2013-10-14T22:05:29+00:00 hostname sshd/6359 Connection closed by 192.168.1.10
2013-10-14T22:05:29+00:00 hostname sshd Connection closed by 192.168.1.10
2013-10-14T22:05:29+00:00 hostname SSHD[1133] Connection closed by 192.168.1.10
2013-10-14T22:05:29+00:00 hostname SSH.D[6359]: Connection closed by 192.168.1.10
字符串提取过程应该是:取以空格分隔的第三个子字符串,提取以[
、:
、/结尾的子字符串
或空格
因此,在前四个日志示例中,提取的字符串将为 sshd
、第五个 SSHD
和第六个 SSH.D
。这可以通过正则表达式实现吗?
编辑:
我尝试的是 ((?:[A-Za-z][A-Za-z0-9_.-]+))
它似乎有效,但说实话,我修改了一个示例正则表达式并使用在线工具对其进行调整,直到它适合我的用例,但我不确定它到底是如何工作的。
最佳答案
双重split
应该可以完成这项工作:
String token = data.split(" +")[2].split("[\\[:/]")[0];
关于Java使用正则表达式提取字段分隔子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19370191/