В регулярных выражениях символы ^
и $
являются привязками к началу и концу соответственно сканируемой строки текста.Попробуйте удалить их из вашего шаблона.Возможно, попробуйте что-то вроде:
<?php
$str = '17:30 Football 18:30 Meal 20:00 Quiet';
$chars = preg_split('/(?:[01]\d|2[0-3]):(?:[0-5]\d)/', $str, -1, PREG_SPLIT_OFFSET_CAPTURE);
print_r ($chars);
?>
Не забывайте, что :
- это специальный символ в регулярных выражениях, поэтому его необходимо экранировать.
По умолчанию all групп в скобках запоминаются, но вы можете остановить это с помощью синтаксиса ?:
.Я не совсем уверен, вызовет ли это проблему в PHP, потому что я протестировал выражение с Python, но это должно предотвратить возвращение совпадений в массив.
Вы также можете немного расширить выражениечтобы автоматически убрать пробелы вокруг ваших слов:
$chars = preg_split('/\s*(?:[01]\d|2[0-3]):(?:[0-5]\d)\s*/', $str, -1, PREG_SPLIT_OFFSET_CAPTURE);
Надеюсь, это поможет!