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

我试图使用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:7和23: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.这与你已经拥有的小时部分相同.

相关文章

正则替换html代码中img标签的src值在开发富文本信息在移动端...
正则表达式
AWK是一种处理文本文件的语言,是一个强大的文件分析工具。它...
正则表达式是特殊的字符序列,利用事先定义好的特定字符以及...
Python界一名小学生,热心分享编程学习。
收集整理每周优质开发者内容,包括、、等方面。每周五定期发...