Código PHP:
Ver original<?php
$_POST['text'] = 'Estoy contribuyendo con [link url=http://www.forosdelweb.com]Foros del Web[/link], el foro mas grande de programacion en espanol';
$patt = '@\[link url="?(?:http://)?([A-Z0-9.]{5,})"?\]([A-Z0-9. ]{1,})\[\/link\]@is';
/*
Notar que uso (?:http://)? en vez de (http://)? porque debo poder referenciar a los demas elementos ($1 %2 ...$n) siempre en el mismo orden independientemente de si ese el grupo (http://) aparece o no en el enlace.
Simplemente si existe no se le asigna posicion para reemplazos
*/
$texto = preg_replace($patt, '<a href="$1">$2</a>',$_POST['text'] ); echo $texto;
Resultando en..
Código HTML:
Ver originalEstoy contribuyendo con
<a href="www.forosdelweb.com">Foros del Web
</a>, el foro mas grande de programacion en espanol