Perl конвертировать строку URL в ссылку - PullRequest
2 голосов
/ 03 января 2011

Я ищу способ найти URL-адрес в строке и преобразовать его в ссылку.

URL может быть где угодно в строке (начало, середина или конец).

Regex является предпочтительным, но модули CPAN приветствуются.

Ответы [ 3 ]

6 голосов
/ 03 января 2011

Наиболее распространенным решением является Regexp :: Common (без каламбура).Вам нужно использовать {-keep} версию, как показано ниже, чтобы сохранить совпадение (очевидно, в $1)

use Regexp::Common qw /URI/;

while (<>) {
    /$RE{URI}{HTTP}{-keep}/ and print "<A HREF="$1">My Link Name</A>";
} 

Как мы надеемся, приведенный выше пример находит только 1 ссылку на строку.Исправление для more оставлено как упражнение для пользователя.


Другой вариант - Schwern's URI :: Find .Из примера POD:

<code>use CGI qw(escapeHTML);
use URI::Find;
my $finder = URI::Find->new(sub {
    my($uri, $orig_uri) = @_;
    return qq|<a href="$uri">$orig_uri</a>|;
});
$finder->find(\$text, \&escapeHTML);
print "<pre>$text
";
4 голосов
/ 03 января 2011

Вы можете использовать Regexp :: Common, чтобы найти строку, а затем выполнить подстановку, чтобы превратить ее в ссылки.В отсутствие чего-либо еще я использовал URL в качестве текста ссылки.

    use Regexp::Common "URI";
    my $string="Some text containing /3870077/perl-konvertirovat-stroku-url-v-ssylku in middle" ;

    $string =~    s( ($RE{URI}{HTTP}) )
                  (<a href="$1">$1</a>)gx  ;

    print $string ;
4 голосов
/ 03 января 2011
use strict;
use warnings;
use 5.010;
use utf8;
use Regexp::Common qw /URI/;

my $string_with_url = <<'END_STRING';
This is an url to your question:
/3870077/perl-konvertirovat-stroku-url-v-ssylku
END_STRING

say $string_with_url;

$string_with_url =~ s/($RE{URI}{HTTP})/get_link()/eg;

say $string_with_url;

sub get_link {
    return <<'END_LINK';
        _____________¶¶¶¶¶¶¶¶¶¶¶¶¶¶
        ___________¶¶6666555666666¶¶¶
        __________¶¶6666555555556666¶¶
        ___¶¶¶__¶¶¶¶116666556611¶¶666¶¶¶¶
        __¶¶cc¶¶§§§¶¶¶11111111¶¶¶¶¶6¶¶cc¶¶
        __¶¶cc¶¶¶§§§§¶¶¶¶¶¶¶¶¶¶§§§¶¶¶¶cc¶¶
        __¶¶ssc¶¶¶¶§§§§§§§§§§§§§§¶¶¶¶css¶¶
        __¶¶ss¶¶§§¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶§§§¶¶ss¶¶
        ____¶¶ss¶¶ss¯¯¯¯ssss¯¯¯¯ss¶¶ss¶¶
        ______¶¶ssss__¶¶cccc¶¶__ssss¶¶
        ______¶¶¶ssscc¶¶cccc¶¶ccss¶¶¶¶
        _____¶¶££¶¶sssccccccccss¶¶¶££¶¶
        ____¶¶££££¶¶ss¶¶cccsss¶¶¶£££¶¶¶¶¶
        __¶¶¯¯¶¶¶¶¶¶¶¶¯¯¶¶¶¶¶¶¶££££¶¶¶ss¶¶
        __¶¶____________¶¶££££££££¶¶ssss¶¶
        __¶¶¯¯$$$$$$$$¯¯¶¶£££££££££¶¶¶cc¶¶
        __¶¶__$$ƒƒƒƒ$$__¶¶£££££££¢¢¶¶ccc¶¶
        __¶¶¯¯$$ƒƒƒƒ$$¯¯¶¶¢¢¢¥¥¢¢£££¶¶cc¶¶
        __¶¶___$$ƒƒ$$___¶¶££££££££¶¶¶¶¶¶¶
        ____¶¶__$$$$__¶¶££££££¶¶¶¶¥¥¶¶¶
        ______¶¶____¶¶¶¶¶¶¶¶¶¶¥¥¥¥¥¶¶¶
        ________¶¶¶¶¶¶¶¶¶¥¥¥¥¥¥¥¶¶¶¶
        ____________¶¶¶¶¶¶¶¶¶¶¶¶
END_LINK
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...