PHP preg_replace () обратные ссылки, используемые в качестве аргументов другой функции - PullRequest
1 голос
/ 30 июля 2009

Я пытаюсь извлечь информацию из тегов с помощью регулярных выражений, а затем вернуть результат на основе различных частей тега.

preg_replace('/<(example )?(example2)+ />/', analyze(array($0, $1, $2)), $src);

Итак, я беру части и передаю их функции analyze(). Оказавшись там, я хочу сделать работу на основе самих частей:

function analyze($matches) {
    if ($matches[0] == '<example example2 />')
          return 'something_awesome';
    else if ($matches[1] == 'example')
          return 'ftw';
}

и т.д.. Но как только я доберусь до функции анализа, $matches[0] просто равно строке '$0'. Вместо этого мне нужно $matches[0], чтобы сослаться на обратную ссылку из вызова preg_replace (). Как я могу это сделать?

Спасибо.

РЕДАКТИРОВАТЬ: я только что увидел функцию preg_replace_callback (). Возможно, это то, что я ищу ...

Ответы [ 2 ]

8 голосов
/ 30 июля 2009

Вы не можете использовать preg_replace таким образом. Вы, вероятно, хотите preg_replace_callback

0 голосов
/ 30 июля 2009
$regex = '/<(example )?(example2)+ \/>/';
preg_match($regex, $subject, $matches);

// now you have the matches in $matches and you can process them as you want

// here you can replace all matches with modifications you made
preg_replace($regex, $matches, $subject);
...