【发布时间】:2013-07-23 23:25:24
【问题描述】:
我将一个文本文件拆分成块,以便通过使用正则表达式提取那些不包含特定行的块。 文本文件如下所示:
[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/ )
不幸的是,它不起作用 - 输出文件与原始文件相同。任何想法我做错了什么?
【问题讨论】:
-
在使用
unless的时候不要使用!~——这是一个双重否定,和原来的一样。 -
谢谢,但这只是一个错字。