0

我是 Perl 的新手,想知道您是否可以帮助我进行查询。

我正在尝试从文本文件中提取 <> 括号之间的确切文本和数字序列。

这是代码:

open (FILE1, "file.txt") or die ("Error: File cannot be found"); 
@file1 = <FILE1>; 
@file2 = join(' ', @file1); 
my @grabJustTheHVSection = grep { $_ =~ /\<HV\>.*\<\\HV\>/s} @file2; 
close(FILE); 

我希望数组 @grabJustTheHVSection 仅包含 file1.txt 中的以下内容:
00000000 00000010 00000100 00001000 00000000 00100000 00000000 00000010 00000100 00001000 000000000 <\HVSection

更多示例代码:

@file2  = join('', @file1); 
my @replace = grep { $_ =~ /\<HV>/g } @file2;
foreach $_ (@replace){
    if($_ !~ m/.PDT>/g){
    s /<HV>/<PDT>/g;
    s /<\\HV>/<\\PDT>/g;
    (print NEW $_) or die "Cant write to $new: $!";
    }

谢谢

4

1 回答 1

0

如果这是某种标记语言,您可能应该改用解析器。中的“反转”反斜杠<\HV>似乎表示其他内容,但也许这是一个错字?

无论如何,您可以使用触发器运算符。要点是在条件之间触发器返回真,否则为假。

use strict;
use warnings;
use Data::Dumper;

chomp(my @file = <DATA>);

my @HV = grep /<HV>/ .. /<\\HV>/, @file;
print Dumper \@HV;

__DATA__
foo
<HV>
00000000 00000010 00000100 00001000 00000000 00100000
00000000 00000010 00000100 00001000 00000000 00100000
<\HV>
bar

输出:

$VAR1 = [
          '<HV>',
          '00000000 00000010 00000100 00001000 00000000 00100000',
          '00000000 00000010 00000100 00001000 00000000 00100000',
          '<\\HV>'
        ];
于 2013-03-11T14:36:48.070 回答