Con expresiones regulares:
    
Código PHP:
Ver original<?php
 
function mitexto($str)
{
}
 
$string = '[texto]holahola[/texto]';
$new = preg_replace('/\[texto\](.+?)\[\/texto\]/e', "mitexto('$1')", $string);  
echo $new;
?>
  
Debería imprimir "HOLAHOLA". 
El modificador 
e en las expresiones regulares PCRE de php funciona en la función preg_replace haciendo que el 2do parámetro pasado (el reemplazo) sea evaluado como código php. 
Un saludo.