El otro día en el curro, me vi con la necesidad de averiguar todas las urls, imágenes i javascripts con links que la pagina pudiera contener y reemplazarlas por otro tipo de urls.
Para realizarlo, use la expresión: preg_replace_callback
Esta expresión del php lo que hace es, a través de una expresión regular que le marquemos, nos hará un callback a una función que tratará los parametros, lo cual nos es muy útil en este caso, para marcarle que nos detecte los tags de imagenes, links...
Quedaría una cosa así:

PHP:
  1. $textos= preg_replace_callback('#<(?:a|img|embed).*?(?:(?:href|src)\s*=\s*(["\'])(.*?)\1)[^>]*>#si',
  2. 'find_links_into_text',
  3. $texto_bd);

Como vemos , le pasamos primero a preg_replace_callback, la expresión regular que nos detectara las imágenes, links o embebidos, luego le marcamos la función que se encargara de tratar los datos y por ultimo, $texto_bd, con el texto cargado de la bd
Y la función 'find_links_into_text', podría realizar lo siguiente:

PHP:
  1. function find_links_into_text($matches) {
  2. $variables = array ('javascript', 'http://www', 'http://');
  3.  
  4. foreach($variables as $key=>$value) {
  5. $pos     = strpos($matches[2], $value);
  6. if ($pos !== FALSE) {
  7. $url = $value;break; // Aqui trataremos la url como queramos. En este caso le asigno el valor que le toca (javascript, http://, etc)
  8. }
  9. }

En la función, creo una array($variables) que contendrá los tipos de url que que quiera detectar o modificar y luego con el foreach voy detectando de que se trata la url que recibo.
El matches, contiene la info de la expresión regular y recojo el segundo valor del array matches ya que el primero me guarda toda la información y no me interesa toda la info.
Seguro que hay mas maneras de realizarlo, pero a mi me funciono muy bien esta.