我如何选择这样的一行:
数字演示(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:00,20:40,21:20,22:00,22:40,23:10,23:40。
并且匹配所有24小时,所以我可以使用date()转换为更易读的格式?
我也希望在24:00-24:59范围内匹配时间
谢谢!
答案 0 :(得分:5)
您可以使用如下所示的正则表达式,该表达式允许从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
或其他一些断言中以确保时间格式化的数字独立存在。
答案 1 :(得分:1)
最简单的方法是匹配(\d{2}):(\d{2})
(preg语法)之类的东西,然后将两个子匹配转换为整数并检查它们是否在正确的范围内。
答案 2 :(得分:0)
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));