首页 > 解决方案 > RegEx 用于匹配关键字后的一到三个单词

问题描述

我有类似的系统日志:

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 个单词,具体取决于字符串的长度。

我该如何解决这个问题?

标签: regexpcre

解决方案


您可以使用

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

请参阅正则表达式演示

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

查看正则表达式图:

在此处输入图像描述

在此处输入图像描述


推荐阅读