プロが教えるわが家の防犯対策術!

perlの正規表現で、Aというファイルの中から、2に
マッチしたらマッチした行から}まで、抜き出すというのは
どのようにやるのでしょうか?

# ファイルAの内容
1 parameter {
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
}
2 parameter {
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
}
3 parameter {
ccccccccccccccccccccccccccccccccc
ddddddddddddddddddddddddddddddddd
}

欲しいデータとしては
2 parameter {
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
}
を取得したいです。

以上宜しくお願いします。

A 回答 (2件)

対象が $_ にあるとすれば, 範囲演算子 .. を使って


print if /^2 parameter/ .. /^\}/;
とも書けます.
    • good
    • 0

#!/usr/bin/perl


use warnings;
use strict;

my $filename = shift || 'file_a.txt';
open my $fh, '<', $filename or die "$filename: $!";

my $text;
{
local $/ = undef;
$text = <$fh>;
}
close $fh or die "$filename: $!";

if ( $text =~ m/(2 parameter {[^{]*})/s ) {
print $1, "\n";
}

$ cat file_a.txt
1 parameter {
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
}
2 parameter {
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
}
3 parameter {
ccccccccccccccccccccccccccccccccc
ddddddddddddddddddddddddddddddddd
}
$ perl foo.pl file_a.txt
2 parameter {
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
}
$
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!