我有这个字符串'1','name','phone','address, street'
我想将它拆分成一个数组,所以我使用:
$link =~ s/'//g;
删除“'”然后@array = $link.split(',')
,问题现在是地址,正如你在这里看到的那样,地址可能有逗号,所以当分裂时我弄错了,我正在思考从一开始就做正则表达式,但我不确切地知道如何写它,我的意思是我能想出(?:.*?){1}[^']*[,](.*?)(?='|$)
但它不起作用。 ({1}从1到5不等)
答案 0 :(得分:8)
比Text::CSV
轻一点Text::ParseWords
是{{3}},它处理嵌入式分隔符,并且还有作为核心模块的好处。
use Text::ParseWords;
use Data::Dumper;
my $str = "'1','name','phone','address, street'";
my @list = quotewords(",", 0, $str);
print Dumper \@list;
<强>输出:强>
$VAR1 = [
'1',
'name',
'phone',
'address, street'
];
答案 1 :(得分:3)
你没有使用正则表达式;你使用Text::CSV:
use Text::CSV;
my $csv = Text::CSV->new({ escape_char => "'", quote_char => "'", binary => 1 });
my $link = "'1','name','phone','address, street'";
$csv->parse($link) or die $csv->error_diag;
my @array = $csv->fields;
答案 2 :(得分:2)
你可以使用
','|'
为您的正则表达式
答案 3 :(得分:1)
详细说明一下,拆分引号逗号引用,而不仅仅是逗号。
$link = "'1','name','phone','address, street'";
$link =~ s/(^'|'$)//g;
@array = split("','", $link);
print join("\n", @array);
答案 4 :(得分:1)
你可以忽略逗号:
@array = /'([^']*)'/g;
这假设所有条目都是单引号,并且不包含(转义的)单引号。