У меня вопрос по одному делу.
Я использую функцию php preg_replace () для форматирования данных из этой строки:
12:05 Place1 12:40 14:00 16:30 Place2 "Test" 29 Janury
Мне нужно, чтобы это звучало так:
<li>29 January - Place1 - 12:05</li>
<li>29 January - Place2 "Test" - 12:40 14:00 16:30</li>
Мое регулярное выражение:
/(\d[0-9]:\d[0-9]).+?(\D+).+?(\d[0-9]\s(January|February|March))/
В настоящее время я использую что-то вроде этого:
$text = "12:05 Place1 12:40 14:00 16:30 Place2 "Test" 29 Janury";
$data = preg_replace("/(\d[0-9]:\d[0-9]).+?(\D+).+?(\d[0-9]\s(January|February|March))/", "<li>$3 - $2 - $1</li>", $text);
echo $data;
Проблема показывает только первые совпадения,
Может кто знает как решить это дело?
Спасибо 🙂
Это невозможно сделать в одном регулярном выражении, потому что вы хотите использовать совпадение с конца строки до того, как механизм PCRE достигнет его. Вам нужно сделать это в два этапа:
preg_match()
с PREG_OFFSET_CAPTURE
чтобы захватить дату с конца строки в другую переменную. Используйте смещение, которое это обеспечивает, чтобы обрезать оригинальную строку.preg_match_all()
усеченная строка, чтобы получить время & помещает как массив, затем итерирует массив для использования каждого совпадения & переменная даты для создания списка. '/((?:\s*+\d\d:\d\d)++)\s++((?:.(?!\d\d:\d\d\s))++)\s*+/'
это подходящий шаблон.Других решений пока нет …