我該如何取這樣一行:PHP /正則表達式:匹配/替換24小時時間
數字表示(10:45),(11:30),12:00,12:40,13 :20,14:00,14:40,15:20,16:00,16:40,17:20,18:00,18:40,19:20,20:20,20:40,21:20 ,22:00,22:40,23:10,23:40。
並匹配所有的24小時時間,所以我可以使用date()轉換爲更人類可讀的格式?
此外,我想在24倍相匹配:00-24:59的範圍太
謝謝!
我該如何取這樣一行:PHP /正則表達式:匹配/替換24小時時間
數字表示(10:45),(11:30),12:00,12:40,13 :20,14:00,14:40,15:20,16:00,16:40,17:20,18:00,18:40,19:20,20:20,20:40,21:20 ,22:00,22:40,23:10,23:40。
並匹配所有的24小時時間,所以我可以使用date()轉換爲更人類可讀的格式?
此外,我想在24倍相匹配:00-24:59的範圍太
謝謝!
可能最容易匹配(\d{2}):(\d{2})
(preg語法)之類的東西,然後將兩個子匹配轉換爲整數並檢查它們是否在正確的範圍內。
+1:是的。如果$ 1> 12,則使用($ 1-12)。'pm',否則使用「{$ 1} am」。 – 2010-05-21 15:12:53
這不適用於像120:44的字符串 – 2014-01-27 16:04:20
preg_match_all('/([0-2][\d]):(\d{2})/', $string, $matches)
現在$ matches [0]數組包含所有人類可讀的時間。
如果您想打印特定日期沿着這些,每次餵過的strtotime()函數,這樣
foreach ($matches[0] as $time) echo date('Y-m-d H:i:s', strtotime($time));
如果您使用$ matches [0],那麼不需要分組.../[0-2] \ d:\ d {2} /可以正常工作preg_match_all。 – null 2010-05-21 16:01:51
是真的。我有分組比賽的習慣。如果他決定使用$ matches [1]和$ matches [2]數組分別僅訪問幾小時或幾分鐘,而不必分割字符串: – 2010-05-21 16:43:54
你可以使用正則表達式像下面,這使得從00:00
值通過對包括24:59
。
(?:[01][0-9]|2[0-4]):[0-5][0-9]
你似乎知道你在做什麼,所以我只舉一個簡單的例子,不把時間轉換成日期字符串。
$times = array();
if (preg_match_all('/(?:[01][0-9]|2[0-4]):[0-5][0-9]/', $subject, $matches)) {
$times = $matches[0];
}
print_r($times);
如果目標字符串有一個像1234:5678
值的機會,這將導致上述正則表達式誤報,那麼你可以包裹在\b
模式或其他一些斷言,以確保時間格式的數字謊言他們自己。
@ mr.b:'$ matches [0]'包含所有項目的全部匹配(畢竟它是'preg_match_all') – salathe 2010-05-21 22:09:13
我不確定爲什麼我想象它是代碼中的「foreach」而不是「if」。但是,再一次,它無論如何不會有任何意義。我的壞,對不起。刪除了我的評論。 – 2010-05-21 23:14:40
應該是23:59作爲最大值? – 2013-04-04 14:57:23
請定義「更人類可讀的格式」。 – Johnsyweb 2010-05-21 15:10:41
恕我直言,這是一個非常好的和人類可讀的格式。 – andr 2010-05-21 15:18:50
您確定關於「24:00-24:59」範圍嗎? 不應該是「23.00-23.59」嗎?導致之後應該是「00.00-00.59」?? – Kunal 2010-05-21 15:58:25