mir: php-funktion vgl preg_match_all

hallo welt !
hab ne funktion, vergeleichbar mit preg_match_all gebastelt.
einziges problem: irgendwas stimmt nicht bei der verarbeitung von * bzw die ersten 2 while schleifen... unten is noch ein beispiel.

<?

function get_txt($ante,$post,$txt)
{

while(!(strpos($ante,"*")===false))
      {
         $sp=explode ("*",$ante,2);
          $sp_l=0;$sp_r=0;
         $sp_l=$sp
;
         for($i=0;$i<=count($sp); $i++)
         {
            if($i!=0){$sp_r=$sp_r.$sp[$i];}
         }
         $ante=$sp_l.get_txt($sp_l,$sp_r,$txt).$sp_r;
         unset($sp);
      }

while(!(strpos($post,"*")===false))
      {
         $sp=explode ("*",$post,2);
          $sp_l=0;$sp_r=0;          $sp_l=$sp
;
         for($i=0;$i<=count($sp); $i++)
         {
            if($i!=0){$sp_r=$sp_r.$sp[$i];}
         }
         $post=$sp_l.get_txt($sp_l,$sp_r,$txt).$sp_r;
         unset($sp);
      }

$inside=1;
   $r1=@strpos($txt,$ante); if($r1===false){ $inside=0;}
   $r2=@strpos($txt,$post); if($r2===false){ $inside=0;}
   while($inside==1) //((strpos($txt,$ante)!=true)&&(strpos($txt,$post)!=true))
   {
        $p1=@strpos($txt,$ante);
        $p2=@strpos($txt,$post);
        $laenge=strlen($txt);
        $inhalt=substr($txt,($p1+strlen($ante)),($p2-$p1-strlen($ante)));
      $inter[]=$inhalt;
      $txt=substr($txt,($p2+strlen($post)),($laenge-$p2+strlen($post)) );
     $inside=1;
     $r1=@strpos($txt,$ante); if($r1===false){ $inside=0;}
     $r2=@strpos($txt,$post); if($r2===false){ $inside=0;}
   }

return $inter;
}

?>

<? //das funktioniert:
$txt="12345678901234567890";
$ante="123";
$post="678";
$test= get_txt($ante,$post,$txt);
print_r($test);
echo "<br>";
?>
<? //das nicht:
$txt="12345678901234567890";
$ante="1*3";
$post="678";
$test= get_txt($ante,$post,$txt);
print_r($test);
echo "<br>";
?>

danke!