Вы можете использовать preg_replace_callback()
:
function do_stuff($values) {
return '<object id="' . $values['id'] . '" />';
}
$text = 'some stuff [media id=468 width=660 height=440] more stuff';
$new_text = preg_replace_callback('@\[media id=(?P<id>\S+) width=\S+ height=\S+\]@',
'do_stuff', $text);
echo "text: $text\n new text: $new_text";
Даст вам
text: some stuff [media id=468 width=660 height=440] more stuff
new text: some stuff <object id="468" /> more stuff
Если вы измените свой do_stuff()
обратный вызов:
function do_stuff($values) {
$allowed = array('468', '222');
if (in_array($values['id'], $allowed)) {
return '<object id="' . $values['id'] . '" />';
} else {
return $values[0];
}
}
Это просто вернет вам тот же текст, если id не 468 или 222. Это довольно простой пример, я уверен, что вы сможете выяснить, как настроить поведение в соответствии с вашими потребностями.