如何使用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
。
非常感谢
答案 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