为系统正常运行时间范围内创建正则频率



我正在将远程主机的输出接收到专有的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+与数字匹配并在此后进行测试。更复杂的解决方案是下面的正则表达式,该正则捕获了单独组的天数。组表示以下值:

  1. 7天或更短的时间
    • 我在这里假设这意味着00:00:0006:23:59
  2. 7-14天
    • 我在这里假设这意味着07:00:0013:23:59
  3. 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从字面上看
  • $在行末端断言位置

最新更新