php, expresiones regulares: problema con links

p3rf3ctuz

Buenas,
tengo un problemilla con las expresiones regulares . Ahora mismo tengo este patron para repmplazar urls por su respectivo link en html.
$patron="(([[:alpha:]]+://)|www.)[.<>[:space:]]+.[<>[:space:]]+";
$replace="<a href=\"http://\0\" target=\"_blank\">\0</a>";
$contenido=ereg_replace($patron,$replace, $contenido);

Cuando un usuario escribe www.media-vida.net saldria el link en html mediante <a href="www.media-vida.net">www.media-vida.net</a>

ahora quiero implantar bbcode y meter la etiqueta para poder mostar imágenes. El problema es q al hacer el replace mencionado arriba, la url de dentro de las etiquetas img se sustituye tb y eso no quiero :S

Conclusion:
quiero conseguir un patron q me busque solo las urls del tipo
www.media-vida.net
http://www.media-vida.net

pero no

A ver si me podéis echar una mano q me estoy volviendo loco xd

guner

aunque esa regexp es algo cochina

(?![img])(([[:alpha:]]+://)|www.)[.<>[:space:]]+.[<>[:space:]]+(?![/img])

PD: eso que he puesto arriba no funciona porque tu regexp no funciona como esperas

¿sólo coge el http o el www?

bueno, el caso es la expresión de "NO [img]"

(?![img]) antes y
(?![/img]) después

p3rf3ctuz

pos no me chuta, me da un error de php

Warning: eregi_replace() [function.eregi-replace]: REG_BADRPT in D:\Programak\AppServ\www\trilita4.0\GO\funciones\funciones.php on line 238

esq se puede usar (?![img]) con el ereg_replace? :S

PD: no, no tengo mucha idea del tema xD

guner

ah, vale, que usas expresiones posix extendidas, no me habia fijado aunque me habia extrañado no ver los delimitadores jaja.
tonces de lo que dije nada

p3rf3ctuz

ummm, q es eso de "posix extendido"? y q tipo de expresiones usas? con q funciones?

salu2

guner

Yo sólo uso en PHP PCRE, Perl Compatible Regular Expressions.

www.php.net/PCRE

p3rf3ctuz

vale gracias.
Estoy probando con eso e iwal iwal me casa.
el patron es el siguiente:
$patron="/(?![img])(([[:alpha:][:digit:]]+:\/\/)|(www.))[.<>[:space:]]+(.[.<>[:space:]]+)+(?![\/img])/";

:(

Voy a ver si consigo algo leiendo manuales

Editado:

vale, ya lo e descubierto

es como decías tu, pero se te ha olvidau el carácter "<" en el primero
(?<![img])
(?![img])

$patron="/(?<![img])(:?(:?http:\/\/)|(:?www.))[.<>[:space:]]+(.[.<>[:space:]]+)+(?![\/img])/i";

aunque no casa bien porq, como ya dijiste, esta mal el resto del patrón, pero eso ya es otra cosa.. a ver si lo arreglo xd

vale, gracias por todo :D

guner

Ostia, si vas a usar la barra / dentro del patrón no lo uses como delimitador, que luego te vuelves loco escapándolas jaja

p3rf3ctuz

a yo creia q solo se podia usar ese carcater pa delimitar xD

Usuarios habituales

  • p3rf3ctuz
  • guner