$found_ids = preg_replace($search, "$1", $matches[0]);
Da stimmt aber jetzt etwas nicht - das erste Argument ist der Ausdruck, das Zweite die Ersetzung und das dritte der String in dem zu suchen ist - das ist in deinem Fall $text und nicht $matches[0].
Das hab ich jetzt davon, dass ich nicht den ganzen Source von vorhin mit reingenommen hab ins neue Posting. $matches[0] ist ja bereits das Ergebnis von preg_match_all. Wenn du (chronologisch) von hinten nach vorne liest, verstehst du wie es funktioniert :-)