PHP / регулярное выражение: сопоставление / замена 24 часа - PullRequest
0 голосов
/ 21 мая 2010

Как мне взять такую ​​строку:

Цифровое представление (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 ]

5 голосов
/ 21 мая 2010

Вы можете использовать регулярное выражение, подобное следующему, которое допускает значения от 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 голос
/ 21 мая 2010

Вероятно, проще всего сопоставить что-то вроде (\d{2}):(\d{2}) (синтаксис preg), затем преобразовать оба подспаривания в целое число и проверить, находятся ли они в правильном диапазоне.

0 голосов
/ 21 мая 2010
preg_match_all('/([0-2][\d]):(\d{2})/', $string, $matches)

Теперь массив $ match [0] содержит все читаемые человеком времена.

Если вы хотите распечатать их вместе с определенной датой, каждый раз передавайте через функцию strtotime (), например

foreach ($matches[0] as $time) echo date('Y-m-d H:i:s', strtotime($time));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...