首页 > 解决方案 > 用于匹配只需要以有效序列开始的模式的正则表达式

问题描述

我在这里有这个正则表达式模式/^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/。它用于验证带有可选前导零的 HH:MM 24 小时字符串。

但是,例如,当我将它与 string 匹配时23:59,它可以工作。这是好事。但我也想匹配这些字符串:2, 23, 23:,23:523:59. 经过数小时的调试,我仍然找不到这样的东西,如果它存在的话。

(如果有用,我使用的是 Objective-C 正则表达式引擎,或者我也可以选择使用 Swift 引擎。)

标签: objective-cswiftregex

解决方案


您可以以数字 00-23 开始匹配,或者将所有分钟部分设为可选。

^(?:[01]?[0-9]|2[0-3])(?::(?:[0-5][0-9]?)?)?$

解释

  • ^字符串的开始
  • (?:非捕获组
    • [01]?[0-9]匹配 00 - 19 或 0-9
    • |或者
    • 2[0-3]比赛 20-23
  • )关闭组
  • (?:非捕获组
    • :匹配一个:字符
    • (?:[0-5][0-9]?)?可选匹配 5 和可选数字 0-9
  • )?关闭组并使其可选
  • $字符串结束

正则表达式演示


推荐阅读