regex - 将 24 小时格式的时间与正则表达式匹配

标签 regex

我正在尝试使用 egrep 将 24 小时时间与正则表达式相匹配。

这是我的测试文件 test.txt:

32:23:31
24:30:31
23:70:31
23:61:31
23:10:70
23:10:61
22:17:16
01:17:15
24:15:22
0:17:16
00:17:17
24:30:31

这是我的正则表达式:
egrep '(2[0-3]|1[0-9]|0[0-9]|[^0-9][0-9]):([0-5][0-9]|[0-9]):([0-5][0-9]|[0-9])' test.txt

结果匹配:
23:10:70
23:10:61
22:17:16
01:17:15
00:17:17

知道为什么它匹配 23:10:70 和 23:10:61 吗?

最佳答案

它实际上是匹配的 23:10:723:10:6 ,但由于您没有使用行尾元字符 $在字符串的末尾,它将处理后面的任何内容。

egrep '^(2[0-3]|1[0-9]|0[0-9]|[^0-9][0-9]):([0-5][0-9]|[0-9]):([0-5][0-9]|[0-9])$' test.txt

换句话说,您应该只允许 [0-9]在字符串的末尾,如果匹配的数字是该行的最后一位,即如果后面跟着 $ .

另一种选择是,如果最后一位数字小于 10,则强制将其填充为 0,即代替 [0-9]使用 0[0-9] .这将匹配 23:10:07 ,但不是 23:10:7 .这与您在小时部分已经拥有的相同。

关于regex - 将 24 小时格式的时间与正则表达式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12438092/

相关文章:

javascript - 使用正则表达式和 javascript 解析 twitter @name

javascript - 用某些字符替换 regExp (Javascript)

regex - 从R中的字符串中仅提取整数

c# - 正则表达式问题和 c#

c++ - 在C++中保留字符串中所需的字符

regex - 如何编写代码以识别正则表达式是否与给定字符串匹配?

javascript - 有人可以解释为什么这个正则表达式与不同的正则表达式风格匹配不同吗?

regex - 使用基于DFA的(线性时间)正则表达式: possible?捕获组

java - 从java中的where条件获取列名

Python:将字段值提取到新列中,写入Excel