innanziutto devi usare preg_replace_callback per usare funzioni/metodi come replacement. Sintassi per richamare un metodo di una classe:
Codice PHP:
preg_replace_callback($rex,array(&$this, 'cb_function'),$string) ;
Poi io proverei a fare una cosa di questo tipo:
Codice PHP:
function rpl_callback($mth) {
$tmp = '' ;
switch($mth[1]){
case 'FORM': $tmp=$this->blabla(); break;
case 'RICERCA': $tmp=$this->blabla();break;
case 'ELENCO': $tmp=$this->blabla();break;
}
return $tmp ;
}
$rex = '#(<% CATEGORIE_(FORM|RICERCA|ELENCO) %>)#' ;
$str=preg_replace_callback($rex, array(&this,'rpl_callback'), $str) ;
approssimativamente.
EDIT:
mi sono scordato, ovviamente potresti usare preg_replace attivando nella regex il modificatore "e", lasciando più o meno invariato il codice che hai postato, ma secondo me è più scomodo.