MUCHÍSIMAS GRACIAS. Me he buscado un manual de PCRE y es mucho más sencillo de entender y a primera vista me parece mucho más potente. Incluso se me acaban de currir algunas ideas para mejorar tu función, y eso con un simple vistazo al manual. Muchas gracias, de verdad.
Edit:
Bueno, pues ya le he dado algunos retoques a la función (en realidad he hecho dos: una para q me coja los q empiezan por http, ftp, https y otra para q los q empiezan por www. los convierta en enlaces. Hasta aquí todo bien, pero ahora tb me gustaría implementar una cosilla más. Quería poner código bbcode en mi web. Entonces al implementar la negrita, el subrayado, la itálica, etc. no tengo ningún problema, pero cuando se trata de hacer enlaces del tipo:
[web=http://www.google.es]GooGLe[/web]
no me lo hace correctamente. Bueno, me explico: sí q me lo hace correctamente, pero al unir las dos funciones de autoresaltado de enlaces q mencioné anteriormente y la función de mostrar enlaces de este tipo con bbcode, me sale mal. Y aquí sí q no sé cómo meterle mano... A ver si alguien me puede ayudar a hacer q estas tres funciones puedan convivir en paz y armonía xD
// BBcode
$texto = preg_replace('@([web=([]])]([]])[\/web])@', '<a href="\2" target="_blank">\3[/b]', $texto);
// Resaltamos los enlaces
// Primero cambiamos los que empiecen por http(s):// o ftp://
$texto = preg_replace('@((?im:http|https|ftp):\/\/[.\W.-]+[\w.\?#\%\&\=\/-]+)@',
'<a href="\1" target="blank">\1</a>', $texto);
// Ahora les añadimos el http:// a los que empiecen por www. Y NO TENGAN ANTES EL HTTP(S):// o FTP://
$texto = preg_replace('@((?<!((?im:http):\/\/)|((?im:https):\/\/)|((?im:ftp):\/\/))(?im:www.)[\W.-]+[\w.\?#\%\&\=\/-]+)@',
'<a href="http://\1" target="blank">\1</a>', $texto);
Entonces la cosa es q el autoresaltado y el bbcode funcionan bien por separado, pero al ponerlos juntos, se va todo a la mierda. Yo creo q una solución sería q cuando las funciones de autocompletado encontrasen código entre las etiquetas <a> y </a>, q lo ignorasen, pero eso no sé cómo implementarlo.
Saludos y perdón por el tochaco xD