Una expresión regular que localiza URLs de forma precisa

Un problema habitual en programación: identicar las URLs que hay en una cadena cualquiera de texto, entendiendo por “cualquiera” algo sin estructura como un mensaje de correo electrónico o un mensaje publicado en Twitter. Quiero ofrecer una solución, en la forma de esta expresión regular:

b(([w-]+://?|www[.])[^s()<>]+(?:([wd]+)|([^[:punct:]s]|/)))

Este patrón debería funcionar con la mayoría de sistemas que implementan expresiones regulares. Puedo asegurar que funciona en Perl, Ruby y con la librería de expresiones regulares PCRE (que a su vez significa que funciona en PHP y BBEdit, pues ambos usan PCRE).

El patrón que ofrezco también tiene la intención de ser práctico. No procesa URLs de acuerdo a ninguna especificación oficial. No se limita a protocolos de URL predefinidos. Debería ser capaz de interpretar cosas como paréntesis y puntuación suelta. Por ejemplo, encontrará correctamente la URL en las siguientes líneas de muestra:

http://foo.com/blah_blah
http://foo.com/blah_blah/
(Algo parecido a http://foo.com/blah_blah)
http://foo.com/blah_blah_(wikipedia)
(Algo parecido a http://foo.com/blah_blah_(wikipedia))
http://foo.com/blah_blah.
http://foo.com/blah_blah/.
<http://foo.com/blah_blah>
<http://foo.com/blah_blah/>
http://foo.com/blah_blah,
http://www.ejemplo.com/wpstyle/?p=364.
http://✪df.ws/e7l
rdar://1234
rdar:/1234
x-yojimbo-item://6303E4C1-xxxx-45A6-AB9D-3A908F59AE0E
http://➡.ws/䨹
www.➡.ws/䨹
<tag>http://ejemplo.com</tag>
Sólo un enlace www.ejemplo.com.

Actúa de forma especialmente intuitiva con los paréntesis, que según mi propia experiencia parece que sólo se usan en las URLs de Wikipedia, y que aparentemente son ignorados por la mayoría de patrones de búsqueda de URLs. Sin embargo, el que ofrezco busca paréntesis abiertos y cerrados dentro de la URL; es por esto que ignora correctamente los paréntesis de la siguiente línea:

(Algo parecido a http://foo.com/blah_blah)

El patrón también es permisivo con URLs que contienen caracteres Unicode, lo que le permite, entre otras cosas, encontrar URLs con nombres de dominio IDN, como el dominio ✪df.ws que registré para el generador de URLs cortas que utilizo en el feed de Twitter de Daring Fireball.

Se aceptan sugerencias y mejoras, incluso ejemplos de cadenas de texto con las que el patrón falle.


Deberíais seguir a Daring Fireball en Twitter

Hace unos meses puse en funcionamiento un feed de Twitter oficial con los artículos de DF. Todo lo que publico en Daring Fireball se publica automáticamente en Twitter. Es, de hecho, una versión en Twitter del feed RSS de Daring Fireball.

(Es cierto, algunos clientes de Twitter no procesan correctamente las URLs ?df.ws. La razón es que esos clientes de Twitter tienen fallos. También es cierto que cuando se abren estas URLs en Firefox en Mac OS X, hay que volver a cargar la página de forma manual. Igual que antes, se trata de un fallo de Firefox. No me pidáis que utilice otro nombre de dominio para las URLs acortadas. Si nadie utiliza nombres de dominio IDN, ¿qué incentivo tendrán los programadores para arreglar los fallos con dominios IDN?).

Nota del Traductor: Daring Fireball en Español también tiene un feed de Twitter, en @DF_es.

‘Es igual que Twitter. Salvo que cobramos a la gente por usarlo’

Así habría que responder a cualquier cliente que quiera encargar una prueba (en este caso de diseño) gratuita. Genial.

Documentación para programadores: LPs de iTunes y Extras

Apple:

El envío automático a través de Internet de un LP o Extra de iTunes tiene prevista su entrada en funcionamiento para el primer trimestre de 2010. Hasta ese momento, el proceso de envío seguirá siendo manual y limitado.

Contiene un interesante apéndice sobre TuneKit, la plataforma de JavaScript.

Dan Frommer: Android y Palm necesitan su propio iPod Touch

Estoy completamente de acuerdo con Dan Frommer. Recordad esto: el iPod Touch supone algo así como el 40 por ciento del mercado total de dispositivos con el sistema operativo iPhone OS. Ni Android ni Palm tienen un dispositivo parecido.

Voices

Quiero expresar mi agradecimiento a Tap Tap Tap por patrocinar esta semana el feed RSS de DF para anunciar Voices. Voices es una nueva aplicación para el iPhone muy entretenida — grabas tu voz y Voices la alterará para que suene como uno de los divertidos personajes que incluye, entre ellos una ardilla, un robot, un testigo protegido y muchos más. Incluso puedes compartir tus grabaciones en la Web (como ésta) a través de Twitter, Facebook y correo electrónico.

Voices está disponible a un precio especial de presentación de sólo 0.99 dólares (0,79 euros). Una aplicación de broma para el iPhone ideal para Acción de Gracias.

Pie Guy

Un juego gratis tipo comecocos para el iPhone, creado por Neven Mrgan — aunque, en consonancia con el tema de la semana, se trata de una aplicación web, en lugar de una aplicación  nativa disponible en el App Store. Y se ejecuta de forma local, no hace falta disponer de acceso a Internet.

Field Notes: Just Below Zero

Son tan bonitas que me dan ganas de besarlas. La mejor tirada de Field Notes Colors hasta la fecha. Y echadle un vistazo a este vídeo tan chulo que los chicos de Coudal acaban de presentar (y que incluye un cupón para suscripciones anuales a ediciones Field Notes Colors).

*Nota del Traductor: Field Notes (se traduce como “notas de campo”) es una colección de libretas para anotaciones o bocetos de gran aceptación.

Peter-Paul Koch responde tras su artículo inicial sobre las ventajas de las aplicaciones web para el iPhone frente a las aplicaciones nativas

Todavía ni una sola mención a la plataforma Cocoa Touch. Lo digo y lo repito, esa es la clave de la popularidad del desarrollo de aplicaciones nativas para el iPhone.

En efecto, Apple está intentando registrar la palabra ‘Pod’ como marca

Lo que explicaría por qué el Departamento Legal de Apple puso mala cara al primer intento de The Little App Factory de renombrar su programa iPodRip como PodRip. Me sigue pareciendo lamentable. (Vía Nilay Patel).