Perl regex читать содержимое между двойными кавычками

У меня есть файл, который содержит информацию примерно так:

TAG1 "file1.txt"

некоторые дополнительные строки

TAG2 "file2.txt"

еще несколько строк

TAG3 "file3.txt".

Теперь я хочу прочитать то, что находится внутри двойных кавычек, и назначить его переменной (что-то вроде $var1 = file1.txt $var2 = file2.txt $var3 = fil3.txt). Может ли кто-нибудь гильдии мне, как это сделать?

2 ответа

За исключением периода после "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";


Вы могли бы достичь своей цели

  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;
    }

licensed under cc by-sa 3.0 with attribution.