Perl:如何在未加引号的字符实例上拆分字符串

Perl: How can I split a string on an unquoted instance of a character

在 perl 中,我怎样才能只沿着不带引号的定界符拆分字符串?即以下字符串:

my $line = '"a quoted, comma", word1, word2';

应该生成一个包含以下元素的数组:

"a quoted, comma"
 word1
 word2

您可以使用 parse_line()Text::ParseWords

use  Text::ParseWords;

my $line = '"a quoted, comma", word1, word2';

my @parsed = parse_line(',', 1, $line);

# print "@parsed\n"; # this will print in single line

# To print in new line
foreach (@parsed)
{
    print "$_\n";
}

输出:

"a quoted, comma"
 word1
 word2

您可以使用简单的替代正则表达式模式来做到这一点

use strict;
use warnings;
use 5.010;

my $line = q<"a quoted, comma", word1, word2>;

my @words = $line =~ / (?: "[^"]*" | [^,] )+ /xg;

say for @words;

输出

"a quoted, comma"
 word1
 word2