正規表現を使用して特定の行を含まないブロックを抽出するために、テキスト ファイルをブロックに分割しています。テキスト ファイルは次のようになります。
[Term]
id: id1
name: name1
xref: type1:aab
xref: type2:cdc
[Term]
id: id2
name: name2
xref: type1:aba
xref: type3:fee
数日前、誰かが特定の正規表現 (たとえば "xref: type3") を含むブロックを抽出する方法を教えてくれました。
while (<MYFILE>) {
BEGIN { $/ = q|| }
my @lines = split /\n/;
for my $line ( @lines ) {
if ( $line =~ m/xref:\s*type3/ ) {
printf NEWFILE qq|%s|, $_;
last;
}
}
}
ここで、「xref: type3」を含まないすべてのブロックを新しいファイルに書き込みたいと考えています。私は単に正規表現を否定することでこれをやろうとしました
if ( $line !~ m/xref:\s*type3/ )
または、代わりに if ステートメントを否定することによって
unless ( $line =~ m/xref:\s*type3/ )
残念ながら動作しません。出力ファイルは元のファイルと同じです。私が間違っていることはありますか?