2011-06-07 206 views
4

我一直陷入其中,我最終使兩個正則表達式找到正則表達式查找時間值

我(因爲如0-9一個腳本,另一個是10-99額外號)微妙的變化情況通常使用[0-9]查找只有一個數字的字符串,然後[0-9][0-9]查找具有多個數字的字符串,是否有更好的通配符?

前。什麼表情,我會用同時找到字符串其次 6:45 AM and 10:52 PM

回答

7

您可以指定用花括號重複。 [0-9]{2,5}匹配兩到五位數字。所以你可以使用[0-9]{1,2}來匹配一個或兩個。

[0-9]{1,2}:[0-9]{2} (AM|PM)

我個人喜歡使用\d爲數字,從而

\d{1,2}:\d{2} (AM|PM)

2

[0-9] 1或2次,隨後:

[0-9]{1,2}:[0-9]{2}\s(AM|PM) 

或者是有效時間:

(?:[1-9]|1[0-2]):[0-9]{2}\s(?:AM|PM) 
2

如果你正在尋找一個時間模式,你會這樣做:

\d{1,2}:\d{1,2} (AM|PM) 

或者更具體的時間正則表達式

[0-1]{0,1}[0-9]{1,2}:[0-5][0-9] (AM|PM) 
0

如果我有一個包含一個文件:

1 ABC
2 123XYZ
3 6:45 AM
4 123DHD
5 ABC
6下午10點52
7 CDE

並運行下列

$>grep -P '6:45\sAM|10:52\sPM' temp 
6:45 AM 
10:52 PM 
$>. 

應該做的伎倆(-P是一個perl至REGx)

編輯:

P也許我誤解了,如果我只是想找個時間,其他答案是非常好的,但你似乎是在特定的時間之後。其他人將以HH:MM格式與任何時間匹配。總的來說,我相信你以後的項目將會是|在這種情況下使用管道字符以允許替代短語並且{n,m}匹配n-m次{1,2}將匹配1-2次等等。

+1

哎,我是不是經過特定的時間,我給了這兩個例子來說明我需要找到的價值中最極端的差異。謝謝您的回覆! – CQM 2011-06-07 16:00:52

+0

沒問題。我很高興你很快找到了合適的答案。 – matchew 2011-06-07 16:08:34

1

就像其他的答案,除了AM/PM未被捕獲,這應該是更有效的

\d{1,2}:\d{1,2}\s(?:AM|PM) 
0

它可以是能夠檢查所有類型的時間格式:

例如12:05PM, 3:19AM, 04:25PM, 23:52PM

my $time = "12:52AM"; 
if ($time =~ /^[01]?[0-9]\:[0-5][0-9](AM|PM)/) { 
    print "Right Time Dude..."; 
} 
else { print "Wrong time Dude"; } 

這是你想要的正則表達式。

/^[01]?[0-9]\:[0-5][0-9](AM|PM)/ 
0

有了這個字符串作爲輸入:

Sat, 6 May 2017 02:08:08 +0000 

我這樣做,正則表達式來得到一個或兩個數字組合:

[0-9]*:[0-9]*:[0-9]*