проблема с preg_replace
-
16-09-2019 - |
Вопрос
Я хотел бы сопоставить и извлечь переменные из: {{variable:int}}
- переменная было бы что угодно от А до Я
- : является разделителем
- интервал будет целое число 0-9
На данный момент у меня есть: preg_replace('!\{\{(\S+)\}\}!', "$1", $string)
что делает только половину работы, мне все равно придется разделить на :
.
Спасибо!
Решение
Если вы хотите извлечь имя/значение, я думаю, вам нужно использовать preg_match.
preg_match('!\{\{(.*?):(\d)\}\}!', $string, $matches);
$varname = $matches[1];
$val = $matches[2];
Другие советы
Тебе необходимо не жадный соответствовать (.*?
): preg_replace('!\{\{(.*?):(\d)\}\}!')
Использовать
{{([a-zA-Z]+):(\d+)}}
$1 будет содержать захваченную переменную, $2 будет содержать захваченное целое число.
Объяснение
{{([a-zA-Z])+:(\d+)}}
[a-zA-Z]+ означает как минимум еще один алфавит (маленький или прописные)
за которым следует ":"
за которым следует хотя бы одна или несколько цифр (0–9)
Не связан с StackOverflow