No se cual de ambas funciones estés probando, pero al menos con preg_match_all() no resulta porque la expresión es demasiado ambiciosa.
Voy a omitir ereg() porque sencillamente está obsoleta.
Código PHP:
Ver original<?php
function cortar2($fuente,$izq,$der){
return $salida;
}
$cadena= '<etiqueta>uno</etiqueta> contenido <etiqueta>dos</etiqueta> sigue el contenido <etiqueta>uno</etiqueta>';
$cadena = cortar2($cadena, '<etiqueta>','</etiqueta>');
/*
array(2) {
[0] =>
array(1) {
[0] =>
string(103) "<etiqueta>uno</etiqueta> contenido <etiqueta>dos</etiqueta> sigue el contenido <etiqueta>uno</etiqueta>"
}
[1] =>
array(1) {
[0] =>
string(82) "uno</etiqueta> contenido <etiqueta>dos</etiqueta> sigue el contenido <etiqueta>uno"
}
}
*/
Y desde luego el resultado es muy lejos de lo que dices "anda perfecto", así que al menos con preg_match_all() no sirve lo que mencionas.
Ahora, si cambio la captura de (.+) a (.+?) ya funciona perfecto, pues la expresión es menos ambiciosa y analiza todos los pares de etiquetas, etc.