perl正则表达式在双引号之间读取内容

时间:2014-04-12 15:51:12

标签: regex perl

我有一个包含以下信息的文件:

TAG1      "file1.txt"

一些额外的行

TAG2      "file2.txt"

更多行

TAG3      "file3.txt".

现在,我想阅读双引号内的内容并将其分配给变量(类似于$var1 = file1.txt $var2 = file2.txt $var3 = fil3.txt)。有人可以告诉我如何执行此操作。?< / p>

2 个答案:

答案 0 :(得分:0)

您可以通过

实现目标
  1. 使用正则表达式

    my @files;
    while (my $line = <>) {
            if (m/"([^"]+)"/) {
                    push @files, $1;
            }
    }
    
  2. 使用split()

    my @files;
    while (my $line = <>) {
            my (undef, $file, undef) = split /"/, $line, 3;
            push @files, $file;
    }
    

答案 1 :(得分:0)

除了"file3.txt".之后的时间段(我怀疑是发布问题的工件),您的数据似乎是带有标签的CSV文件。

如果是这种情况,我建议您使用Text::CSV

解析文件
use strict;
use warnings;
use autodie;

use Text::CSV;

my $csv = Text::CSV->new ( { sep_char => "\t" } )
    or die "Cannot use CSV: ".Text::CSV->error_diag ();

my @files;

open my $fh, '<', 'file.csv';
while ( my $row = $csv->getline( $fh ) ) {
    push @files; $row->[1];
}
$csv->eof or $csv->error_diag();
close $fh;

print "@files";