Java使用正则表达式提取字段分隔子字符串

标签 java regex hadoop syslog flume

如何使用正则表达式从系统日志消息中提取程序名?我有一个 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/

相关文章:

regex - 在 R 中使用正则表达式拆分字符串

java - Hadoop(java)改变Mapper输出值的类型

hadoop - Hive-> Kafka:插入Hive Kafka集成外部表失败

java - 如何使用 WritableComparator Hadoop

Java正则表达式否定某个单词

java - Jfree图表抛出空指针异常

regex - VBA Excel : Pattern creation function replacing numbers with characters

regex - perl - 从函数定义中提取参数并将其作为注释放在上面

java - 无法实现自定义ArrayList的RecycleAdapter获取数据库随机查询结果

java - 在 Java 中使用 OpenImaj 从视频中提取帧