Как в регулярном выражении, передать все элементы подмаски?

Добрый день, есть регулярное выражение:

$content = preg_replace_callback('/{([a-z]{1,9})(\s[a-z]{1,9}){0,9}}/', 'function123', $content);
Данная регулярка, должна обрабатывать такие строки как {название параметр параметр....}

Вопрос, как сделать что бы preg_replace передавал не только последнее вхождение подмаски, а все элементы. Пример: {title abc zxc qwe}, preg_replace_callback, вернет всю строку, + title и qwe

  • Вопрос задан
  • 2814 просмотров
Пригласить эксперта
Ответы на вопрос 1
@DrunkenMaster

Я бы делал как-то так:

$content = '{title abc zxc qwe} test {title abc zxc qwe} {title}';

function matches($matches) {
    $title = $matches['title'];
    $params = isset($matches['params']) ? preg_split('/\s/', $matches['params']) : array();
    var_dump($title);
    var_dump($params);
}

$content = preg_replace_callback('/\{(?P<title>[a-z]{1,9})(?:\s(?P<params>[^}]+))?\}/', 'matches', $content);

print $content;

Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы