Perl正则表达式匹配多行

时间:2014-02-10 17:06:35

标签: regex perl

如果我有以下数据:

<br/>
    help can be found...

所以我对实际数据有所了解:

<br/>\n\s\s\s\shelp can be found

我无法弄清楚原因,但Perl没有找到这些匹配。我正在使用以下代码:

my $filename = $ARGV[0];

open(INFILE,  "<",  $filename);

while (<INFILE>){
    if (/(\<br\/\>.*\s{4}[A-Z])/msi){
        print $1."\n";
 }
}

测试Perl是否返回我的文本文档中与此正则表达式匹配的部分,但它没有找到它们。我看不出我的正则表达式有什么问题。任何帮助将非常感激。我试图让Perl在换行符中匹配但不起作用。

1 个答案:

答案 0 :(得分:1)

while循环中的

<INFILE>分别将每一行加载到$_。因此,为了匹配不同的行,您需要将$/设置为undef。然后,您还需要将while循环移动到正则表达式,并使用全局标志来设置多个匹配。

my $filename = $ARGV[0];

$/ =undef;

open(INFILE,  "<",  $filename);

my $file = <INFILE>;

while ($file =~ /(\<br\/\>.*\s{4}[A-Z])/msig){
    print $1, "\n";
}