PHP /正则表达式:匹配/替换24小时

时间:2010-05-21 15:05:59

标签: php regex

我如何选择这样的一行:

数字演示(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范围内匹配时间

谢谢!

3 个答案:

答案 0 :(得分:5)

您可以使用如下所示的正则表达式,该表达式允许从00:0024: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));