为系统正常运行时间范围创建RegEx(s)


一生浮华
2025-03-16 12:22:20 (5天前)
  1. 我正在从远程主机接收输出到专有的InfoSec设备,该设备可以根据正则表达式检查输出。设备文档未指定语言或


发动机
</跨度>
的:

23天,23小时,52分钟
0天,2小时,13分钟
9天,12小时,0分钟

我正在努力建立一个

政策
</跨度>
在正常运行时间的范围内,所以我需要一个正则表达式来看待它们

3 条回复
  1. 0# 那月静好 | 2019-08-31 10-32



    简要



    最简单的方法就是分割字符串

    ,

    然后使用

    ^\d+

    匹配数字,然后进行测试。更复杂的解决方案是下面的正则表达式,它将天数捕获到不同的组中。如果设置了组,则表示以下值:




    1. 7天或更短时间

      1. <UL>
      2. <LI>
      3. 我在这里假设这意味着
      4. <code>
      5. 00:00:00
      6. </code>
      7. <code>
      8. 06:23:59
      9. </code>
      10. </LI>
      11. </UL>
      12. </LI>
      13. <LI>
      14. 7 - 14天
      15. <UL>
      16. <LI>
      17. 我在这里假设这意味着
      18. <code>
      19. 07:00:00
      20. </code>
      21. <code>
      22. 13:23:59
      23. </code>
      24. </LI>
      25. </UL>
      26. </LI>
      27. <LI>
      28. 14天或更长时间
      29. <UL>
      30. <LI>
      31. 我在这里假设这意味着上述两个选项范围之外的任何东西
      32. </LI>
      33. </UL>
      34. </LI>

      </醇>








      请参阅此处使用的正则表达式




      1. ^(?:([0-6])|([7-9]|1[0-3])|(\d+)) days, (\d+) hours, (\d+) minutes$

      2. </code>




      说明





      • ^

        在行的开头断言位置


      • (?:([0-6])|([7-9] | 1 [0-3])|(\ d +))`匹配以下任一选项

        1. <UL>
        2. <LI>
        3. <code>
        4. ([0-6])
        5. </code>
        6. 将0-6之间的数字捕获到捕获组1中
        7. </LI>
        8. <LI>
        9. <code>
        10. ([7-9]|1[0-3])
        11. </code>
        12. 将7-9或10-13之间的数字捕获到捕获组2中
        13. </LI>
        14. <LI>
        15. <code>
        16. (\d+)
        17. </code>
        18. 将任意数字捕获到捕获组3中(捕获未被先前选项捕获的内容,因此14-斤)
        19. </LI>
        20. </UL>
        21. </LI>
        22. <LI>
        23. <code>
        24. days,
        25. </code>
        26. 按字面意思匹配
        27. </LI>
        28. <LI>
        29. <code>
        30. (\d+)
        31. </code>
        32. 捕获捕获组4的小时数
        33. </LI>
        34. <LI>
        35. <code>
        36. hours,
        37. </code>
        38. 按字面意思匹配
        39. </LI>
        40. <LI>
        41. <code>
        42. (\d+)
        43. </code>
        44. 捕获捕获组5的分钟数
        45. </LI>
        46. <LI>
        47. <code>
        48. minutes
        49. </code>
        50. 按字面意思匹配
        51. </LI>
        52. <LI>
        53. <code>
        54. $
        55. </code>
        56. 断言该行末尾的位置
        57. </LI>


  2. 1# 夏花 | 2019-08-31 10-32



    匹配不到7天:




    1. ^[0-6] days, \d+ hours, \d+ minutes

    2. </code>


    要匹配7到14天:




    1. ^([7-9]|1[0-3]) days, \d+ hours, \d+ minutes

    2. </code>


    要匹配14天或更长时间:




    1. ^(1[4-9]|[2-9]\d|\d{3,}) days, \d+ hours, \d+ minutes

    2. </code>


    但是,为简单起见,这些模式不包括确切的结束天数。例如,

    7 days, 0 hours, 0 minutes

    将匹配第二个模式,而不是第一个模式。这就是为什么我把第一种模式叫做“不到7天”而不是“7天或更短”。



    同样的,

    14 days, 0 hours, 0 minutes

    将匹配第三种模式而不是第二种模式。如果你需要它在这两个边缘情况下以另一种方式工作,那将大大复杂化模式。


登录 后才能参与评论