拆分字符串并得到单引号之间的内容?

时间:2013-12-06 00:17:30

标签: regex perl

我有这个字符串'1','name','phone','address, street' 我想将它拆分成一个数组,所以我使用: $link =~ s/'//g;删除“'”然后@array = $link.split(','),问题现在是地址,正如你在这里看到的那样,地址可能有逗号,所以当分裂时我弄错了,我正在思考从一开始就做正则表达式,但我不确切地知道如何写它,我的意思是我能想出(?:.*?){1}[^']*[,](.*?)(?='|$)但它不起作用。 ({1}从1到5不等)

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;

这假设所有条目都是单引号,并且不包含(转义的)单引号。