Regexp Perl: Como extraer sólo referencias relativas

Clasificado en:

En la lista de correo de Php, un amable phpero consulto sobre como extraer sólo links con referencias relativas.
Por lo general, es fácil extraer cosas a través de expresiones regulares, pero evitarlas es más complicado.
Después de darle un buen rato vueltas(media hora para una línea es harto), encontré la solución

preg_match_all( "/(<a.[^>]*href[=\\s]+[\\"'])(?!http|ftp|mailto)([^\\"']*?)[\\"']\\s*>/i",
$texto,$match);
$aReferenciasRelativas=$match[2];

Ufff... El secreto está en (?!http|ftp|mailto), una aserción de perl que indica no extraer el siguiente patrón si se cumple la condición citada. En este caso, que preceda al resto de los caracteres los nombres de los protocolos. Ahora, si se quiere obligar su uso, se puede ocupar (?=http).
Eso por ahora. Espero que les sirva!

Enviar un comentario nuevo

El contenido de este campo se mantiene como privado y no se muestra públicamente.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Saltos automáticos de líneas y de párrafos.

Más información sobre opciones de formato