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

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

$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

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

если надо получить ['title' , 'abc' , 'zxc' , 'qwe'] - то можно просто
/[a-z]{1,9}/

Ответ написан
@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;

Ответ написан
Комментировать
bahek2462774
@bahek2462774
чтото типа такого
$content = preg_replace_callback('/(?:{)([a-z]{1,9})\s([a-z]{1,9})\s([a-z]{1,9})\s([a-z]{1,9})/', function($a) {
    var_dump($a);
}, '{title abc zxc qwe}');


но к сожалению не знаю как сделать с неизвестным числом параметров.

а почему нельзя в callback функции вытаскивать каждый парамтер по одному ?
Ответ написан
bahek2462774
@bahek2462774
а preg_match_all не спасет ситуацию ?
preg_match_all('/[a-z]{1,9}/','{title abc zxc qwe}',  $matches);
var_dump($matches);
Ответ написан
Ваш ответ на вопрос

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

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