Я пытаюсь заменить переменные типа {{{month}}} в шаблоне на текущий месяц и {{{месяц + 1}}} на текущий месяц + 1. Это не самая сложная часть моего кода, за исключением того, что регулярное выражение, которое я написал, не дает ожидаемых результатов.Форматирование даты для шаблонов не работает
$string = '{{{year}}}{{{month+1}}}';
preg_match_all('/{{{(?:([yY])ear|([mM])onth|([dD])ay)(?:(?<operation>[-|+])(?<amount>[1-9]+))?}}}/m', $string, $matches);
var_dump($matches);
Почему у меня так много пустых записей в массиве? я ожидал
[0] => array('{{{year}}}', '{{{month+1}}}')
[1] => array('y', 'm')
[2] => array('', '+')
[3] => array('', '1')
Что я делаю неправильно?
Реагировать вышеуказанный код:
array(8) {
[0]=>
array(2) {
[0]=>
string(10) "{{{year}}}"
[1]=>
string(13) "{{{month+1}}}"
}
[1]=>
array(2) {
[0]=>
string(1) "y"
[1]=>
string(0) ""
}
[2]=>
array(2) {
[0]=>
string(0) ""
[1]=>
string(1) "m"
}
[3]=>
array(2) {
[0]=>
string(0) ""
[1]=>
string(0) ""
}
["operation"]=>
array(2) {
[0]=>
string(0) ""
[1]=>
string(1) "+"
}
[4]=>
array(2) {
[0]=>
string(0) ""
[1]=>
string(1) "+"
}
["amount"]=>
array(2) {
[0]=>
string(0) ""
[1]=>
string(1) "1"
}
[5]=>
array(2) {
[0]=>
string(0) ""
[1]=>
string(1) "1"
}
}
Удалить захваченной группы, в которых нет необходимости, или превратить их в не-захвата групп. Например. 'preg_match_all ('/ {{{:: [yY] ear | [mM] onth | [dD] ay) (? :(? [- | +]) (? [1-9] +))? }}}/m ', $ string, $ matches); ' –
Если удалить группу, я больше не смогу поймать yYmMdD И результат все равно не я ожидаю –
Вы все же можете вернуть захват имени групп к пронумерованным. Это немного прояснит ситуацию. Обратите внимание, что невозможно избавиться от пустых захватов, если вы установили группу захвата. –