4

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 に一致する理由は何か分かりますか?

4

1 に答える 1

5

実際にはandに一致 しますが、文字列の最後に行末メタ文字を使用していないため後続のすべてを処理します。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]一致した数字が行の最後の数字である場合、つまり、その後に$.

もう 1 つのオプションは、最後の桁が 10 未満の場合、つまり を[0-9]使用する代わりに、強制的に 0 を埋め込むことです0[0-9]。これは一致しますが、一致23:10:07しません23:10:7。時間の部分については、すでに持っているものと同じです。

于 2012-09-15T14:16:13.150 に答える