RegEx用于在关键字后匹配一到三个单词

时间:2019-04-22 14:14:37

标签: regex pcre

我的系统日志如下:

Apr 22 11:52:44 localhost systemd: Stopped logstash. 
Apr 22 11:52:07 localhost systemd: Started Getty on tty1. 
Apr 22 11:52:07 localhost systemd: Started Hostname Service. 
Apr 22 11:52:07 localhost systemd: Started Import network configuration from initramfs.

我想在状态(程序名称简称)后得到3个字。

我的解决方案:

"\bsystemd:\s+\S+\s\K\S+\s\S+\s\S+"

但是,程序名可以少于3个字(例如日志中的logstash),这就是为什么我需要一个正则表达式来匹配1或2或3个字(取决于字符串的长度)的原因。

如何解决此问题?

1 个答案:

答案 0 :(得分:0)

您可以使用

\bsystemd:\s+\S+\s\K\S+(?:\s\S+){0,2}

请参见regex demo

\S+(?:\s\S+){0,2}部分完成了工作:它匹配1+个非空白字符,后跟0到2个1+个空白重复,再加上1+个非空白字符。

查看正则表达式图:

enter image description here

enter image description here