First of all, you need to escape—or even better, replace—the delimeters as explained in the other answers.
preg_replace('~((www|http://)[^ ]+)~', '<a href="\1">\1</a>', $str);
Secondly, to further improve the regex, the $n
replacement reference syntax is preferred over \\n
, as stated in the manual.
preg_replace('~((www|http://)[^ ]+)~', '<a href="$1">$1</a>', $str);
En tercer lugar, utiliza innecesariamente paréntesis de captura, lo que solo ralentiza las cosas. Deshazte de ellos. No se olvide de actualizar $1
a $0
. En caso de que se lo pregunte, estos son paréntesis que no capturan: (?:)
.
preg_replace('~(?:www|http://)[^ ]+~', '<a href="$0">$0</a>', $str);
Por último, me gustaría sustituir [^ ]+
con el más corto y más preciso \S
, que es lo contrario de \s
. Tenga en cuenta que [^ ]+
no permite espacios, ¡pero acepta nuevas líneas y pestañas! \S
no.
preg_replace('~(?:www|http://)\S+~', '<a href="$0">$0</a>', $str);
Dup: http://stackoverflow.com/ questions/507436/how-do-i-linkify-urls-in-a-string-with-php –