在字符串之间查找文本

时间:2011-02-26 21:23:02

标签: regex perl

如何使用perl从字符串中提取文本,如下所示:


Get text 1 ...
---------------------------------------------------------------------------------------------
Get text 2 ...
---------------------------------------------------------------------------------------------
Get text 3
---------------------------------------------------------------------------------------------

结果应该是这样的:

%texts =  ( 'text1' => 'Get text 1 ...', 'text2' => 'Get text 2 ...',
'text3' => 'Get text 3 ...' )

类似于PHP preg_match_all

非常感谢

4 个答案:

答案 0 :(得分:1)

如果你的preg_macth_all看起来像preg_match_all('/(foo)/', $text, $matches),则perl等价物就像@matches = $text=~/(foo)/g

答案 1 :(得分:0)

我不确定这是否是你想要的,但是下面的代码从你给出的字符串中提取行并将它们放在哈希中:

use Data::Dumper;

my $str = 'Get text 1 ...
---------------------------------------------------------------------------------------------
Get text 2 ...
---------------------------------------------------------------------------------------------
Get text 3
---------------------------------------------------------------------------------------------';


my %hash = (
    'text1' => $str =~ /.*text 1.*/g,
    'text2' => $str =~ /.*text 2.*/g,
    'text3' => $str =~ /.*text 3.*/g);


print Dumper(\%hash);

此代码段的输出为:

$VAR1 = {
          'text2' => 'Get text 2 ...',
          'text1' => 'Get text 1 ...',
          'text3' => 'Get text 3'
        };

答案 2 :(得分:0)

my $i = 1;
my %text = ();
open my $fh, "<", \$the_string;
while (<$fh>) {
    if (/--------------/) {  # text separator
        $i++;
    } else {
        $text{"text$i"} .= $_;
    }
}

答案 3 :(得分:0)

在Perl&gt; = 5.10中,这应该是:

while( $string =~ /^\w+\s+(\w+)\s+(\w+)[^\n\r]*/pgms ) {
   $texts{$1.$2} = ${^MATCH}
}

此致

RBO