Perl:使用正则表达式匹配的代码段作为替换的一部分

时间:2014-08-09 03:28:06

标签: regex perl

我要做的是使用Perl正则表达式检查(很可能是s ///)来查找字符串中的有效URL并将其替换为该URL的链接版本。

示例:

输入:blah blah www.duckduckgo.com blah bleh

输出:blah blah <a href="www.duckduckgo.com">www.duckduckgo.com</a> blah bleh

我没有任何示例代码,因为我不完全确定从哪里开始。我所知道的是我希望它看起来像这样:

$string =~ s/[URL regex]/[Link replacement regex]/g

感谢阅读。

编辑:正如米勒指出的那样,我不是很具描述性,所以我将把我正在使用的内容包括在我的网址中找到正则表达式。

\s[a-zA-Z0-9\-\.]+\.[\w]{2,3}\s

编辑2:打破我的正则表达式

2 个答案:

答案 0 :(得分:1)

您没有花费大量精力来描述您的数据,这对于了解正则表达式的限制程度是必要的。

然而,作为一个起点,或许寻找至少有一个嵌入期间的单词字符列表将是一个充分的要求:

my $string = 'blah blah www.duckduckgo.com blah bleh';

$string =~ s{(\w+\.[\w.]+)}{<a href="$1">$1</a>}g;

print $string;

输出:

blah blah <a href="www.duckduckgo.com">www.duckduckgo.com</a> blah bleh

答案 1 :(得分:0)

使用URI::Find CPAN模块。对于您的示例,假设无模式URL,这可以:

use strict;
use warnings;
use URI::Find::Schemeless;

my $finder = URI::Find::Schemeless->new( sub {
    my $uri = shift;
    return '<a href="' . $uri->as_string . '">' . $uri->host . '</a>';
});

my $string = 'blah blah www.duckduckgo.com blah bleh';
my $how_many_found = $finder->find(\$string);

print $string, "\n";

打印:

blah blah <a href="http://www.duckduckgo.com">www.duckduckgo.com</a> blah bleh