多行字符串中的perl模式匹配

时间:2014-09-30 18:40:52

标签: regex perl

我有一个变量,其中包含大约100行。我需要打印有网址的行。

$string = "this is just a test line 1
this is a test line 2
http://somelink1
this is line 4
http://link2
...
...

我只需要打印网址链接。

如何从$ string打印匹配模式的所有行。试过下面的代码。

my $resu =~ /(http(s)?://)?([\w-]+\.)+[\w-]+(/[\w- ;,./?%&=]*)?/, $string;
print $resu;

1 个答案:

答案 0 :(得分:1)

您需要使用/g Modifier来匹配多行:

use strict;
use warnings;

my $string = <<'END_STR';
this is just a test line 1
this is a test line 2
http://somelink1
this is line 4
http://link2
...
...
END_STR

while ($string =~ m{(.*http://.*)}g) {
    print "$1\n";
}

输出:

http://somelink1
http://link2

但是,如果你从文件中提取这些数据,你最好只是逐行阅读文件:

while (<$fh>) {
    print if m{(.*http://.*)}g;
}