<?php

function funcao1() {
    return '<Funcao galeria 1>';
}
function funcao2() {
    return '<Funcao galeria 2>';
}

function extrairPalavras($texto, $sepInicial, $sepFinal){
	$resultado = [];
	$contador = $inicio = $final = 0;

	while ($contador < strlen($texto)){
		$posIn = strpos($texto, $sepInicial, $inicio);
		$posFn = strpos($texto, $sepFinal, $final);

		if ($posIn !== false){
			$inicio = $posIn + 1;
			
			if ($posFn !== false){
				$final = $posFn + 1;
				$resultado[$inicio] = $final;
			}
		}
		$contador++;
	}
	return $resultado;
}

$texto = "Lorem [funcao2] impsun [funcao1] Lorem [heya] impsun";
$indices = extrairPalavras($texto, '[', ']');

foreach($indices as $inicial => $final){
	$nomeFunc = substr($texto, $inicial, $final - $inicial - 1);
	
	if(function_exists($nomeFunc)) {
		if (!isset($textoResultado)){
			$textoResultado = str_replace("[$nomeFunc]", $nomeFunc(), $texto);
			continue;
		}
		$textoResultado = str_replace("[$nomeFunc]", $nomeFunc(), $textoResultado);  
	}
}
echo $textoResultado . "\n";
