regex - 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 个单词,具体取决于字符串的长度。
我该如何解决这个问题?
解决方案
您可以使用
\bsystemd:\s+\S+\s\K\S+(?:\s\S+){0,2}
请参阅正则表达式演示。
该\S+(?:\s\S+){0,2}
部分完成工作:它匹配 1+ 个非空白字符,然后是 0 到 2 个重复 1+ 个空白字符,然后是 1+ 个非空白字符。
查看正则表达式图:
推荐阅读
- m4 - m4 可以执行用户定义的 bash 脚本吗?
- ios - 如何交换字符串数组中的第一项和第二项?
- asp.net - 如何水平显示 asp.net 验证摘要?
- javascript - 日期选择器范围不允许结帐日期为同一天
- dart - 为 ExpansionPanelList 的头部和主体赋予不同的颜色
- mysql - GCP-SQL 在 MySQL 上设置多个 sql_mode 标志
- android - 如何避免打开同一个应用程序的两种风格的应用程序?
- android - onReceive 是进行调用者权限检查的正确方法吗?
- c++ - 可以单独使用这两个参数,但不能同时使用这两个参数
- ios - 导入和使用带有 Carthage 的 Swift SnapshotTesting 框架