我正在将远程主机的输出接收到专有的Infosec设备中,该设备可以与正则表达式检查输出。设备文档未指定其用于正则匹配的语言或引擎。该设备在Linux上运行,如果这完全有帮助...
我以以下格式从远程主机接收系统正常运行时间统计信息:
n days, n hours, n minutes
示例:
23 days, 23 hours, 52 minutes
0 days, 2 hours, 13 minutes
9 days, 12 hours, 0 minutes
我正在尝试在正常运行时间的范围内构建政策,因此我需要一条以下等级,如果输出为7天或更短,则可以查看字符串的开头并匹配,这是另一个将匹配7至14的正则等级几天,还有另一个将匹配14天或更长时间的正则。
匹配少于7天:
^[0-6] days, d+ hours, d+ minutes
匹配7至14天:
^([7-9]|1[0-3]) days, d+ hours, d+ minutes
匹配14天或更多:
^(1[4-9]|[2-9]d|d{3,}) days, d+ hours, d+ minutes
但是,为简单起见,这些模式并不包含确切的末端天数。例如,7 days, 0 hours, 0 minutes
将与第二种模式相匹配,而不是第一个模式。这就是为什么我将第一个模式称为"少于7天"而不是" 7天或更短"的原因。
同样,14 days, 0 hours, 0 minutes
将以第三种模式而不是第二种模式匹配。如果您需要在这两个边缘情况下以另一种方式进行操作,那将使模式变得非常复杂。
简介
最简单的方法是仅在,
上拆分字符串,然后使用^d+
与数字匹配并在此后进行测试。更复杂的解决方案是下面的正则表达式,该正则捕获了单独组的天数。组表示以下值:
- 7天或更短的时间
- 我在这里假设这意味着
00:00:00
到06:23:59
- 我在这里假设这意味着
- 7-14天
- 我在这里假设这意味着
07:00:00
到13:23:59
- 我在这里假设这意味着
- 14天或更长时间
- 我在这里假设这意味着以上两个选项范围之外的任何内容
代码
请参阅此处使用的正则
^(?:([0-6])|([7-9]|1[0-3])|(d+)) days, (d+) hours, (d+) minutes$
说明
-
^
在线开始时断言位置 - (?:([0-6))|([7-9] | 1 [0-3])|( d ))`匹配以下任何一个选项
-
([0-6])
捕获0-6之间的数字到捕获组1 -
([7-9]|1[0-3])
捕获7-9或10-13之间的数字捕获组2 -
(d+)
将任何数字捕获到捕获组3中(捕获以前的选项未捕获的内容,因此14-∞)
-
-
days,
从字面上看 -
(d+)
捕获捕获4
的小时数
-
hours,
从字面上看 -
(d+)
捕获捕获第5组的分钟数 -
minutes
从字面上看 -
$
在行末端断言位置