У меня проблемы с PHP Sscanf функция и запятая. Мне нужно извлечь 4 значения, как этот рабочий пример делает:
<?php
$format = '%s %s, blabla %ih blabla %ih';
$input = 'blabla 08-06-2016 blabla 14h blabla 17h';
$result = sscanf($input, $format);
var_dump($result);
выход:
array (size=4)
0 => string 'blabla' (length=10)
1 => string '08-06-2016' (length=10)
2 => int 14
3 => int 17
но мой реальный пример включает в себя один символ запятой, и я не получаю его на работу:
<?php
$format = '%s %s, blabla %ih blabla %ih';
$input = 'blabla 08-06-2016, blabla 14h blabla 17h';
$result = sscanf($input, $format);
var_dump($result);
выход:
array (size=4)
0 => string 'blabla' (length=10)
1 => string '08-06-2016,' (length=11)
2 => null
3 => null
Это очень просто, но я не могу найти решение … Запятая — зарезервированное слово?
ОБНОВЛЕНИЕ 1:
Извините, я забыл упомянуть об этом:
Я хочу использовать строковый шаблон, хранящийся в $ format, в качестве шаблона и для sprintf: если я изменю его, включая regexp, он не будет совместим со sprintf, я ошибаюсь?
Я предположил, что один и тот же шаблон строки может использоваться в двух направлениях: перенос и распаковка: очень полезно! … может быть, это невозможно с запятой?
Спасибо 🙂
Это решит вашу проблему читать разделенный запятыми ввод с помощью scanf.
$format = '%s %20[^,], blabla %ih blabla %ih';
или какая-то другая максимальная длина, 20 произвольно, так как у меня нет контекста в вашем приложении.
Других решений пока нет …