Здесь нет необходимости в preg_replace_callback
, просто используйте массив регулярных выражений и замен на preg_replace
echo preg_replace(['/\[(.*?)\]/', '/\*(.*?)\*/'], ['<i>$1</i>', '<b>$1</b>'], $text);
Если вы хотите использовать preg_replace_callback()
, вы можете захватить разделитель и использовать if
оператор:
echo preg_replace_callback('/([[*])(.*?)[]*]/', function($matches) {
if ($matches[1] == '[') {
return italic($matches[2]);
} elseif ($matches[1] == '*') {
return bold($matches[2]);
}
}, $text);