Регулярное выражение (PCRE) для сопоставления URL

Ввод: мы получаем простой текст в качестве входной строки, и мы должны выделить все URL-адреса с помощью <a href={url}>{url></a>.

В течение некоторого времени я использовал регулярное выражение, взятое из http://flanders.co.nz/2009/11/08/a-good-url-regular-expression-repost/, который я несколько раз модифицировал, но он создан для другой задачи - проверить, вся входная строка является URL-адресом или нет.

Итак, какое регулярное выражение вы используете в таких вопросах?

UPD: было бы неплохо, если бы ответы были связаны с php :-[


person zerkms    schedule 12.05.2010    source источник


Ответы (2)


Взгляните на пару модулей, доступных на CPAN:

где последний немного более прощающий. Регулярные выражения доступны в исходном коде (последнего, например).

Например:

#! /usr/bin/perl

use warnings;
use strict;

use URI::Find::Schemeless;

my $text = "http://stackoverflow.com/users/251311/zerkms is swell!\n";

URI::Find::Schemeless
  ->new(sub { qq[<a href="$_[0]">$_[0]</a>] })
  ->find(\$text);

print $text;

Вывод:

<a href="http://stackoverflow.com/users/251311/zerkms">http://stackoverflow.com/users/251311/zerkms</a> is swell!
person Greg Bacon    schedule 12.05.2010

Для Perl я обычно использую один из модулей, определяющих общее регулярное выражение, Regexp::Common::URI::*. Вы можете найти хорошее регулярное выражение в исходниках этих модулей.

http://search.cpan.org/search?query=Regexp%3A%3ACommon%3A%3AURI&mode=module

person jkramer    schedule 12.05.2010