以逗号分隔,但仅当不在括号中时 [英] Split on comma, but only when not in parenthesis

查看:23
本文介绍了以逗号分隔,但仅当不在括号中时的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用逗号分隔符对字符串进行拆分

I am trying to do a split on a string with comma delimiter

my $string='ab,12,20100401,xyz(A,B)';
my @array=split(',',$string);

如果我像上面那样进行拆分,数组就会有值

If I do a split as above the array will have values

ab
12
20100401
xyz(A,
B)

我需要如下值.

ab
12
20100401
xyz(A,B) 

(不应将 xyz(A,B) 拆分为 2 个值)我该怎么做?

(should not split xyz(A,B) into 2 values) How do I do that?

推荐答案

use Text::Balanced qw(extract_bracketed);
my $string = "ab,12,20100401,xyz(A,B(a,d))";
my @params = ();
while ($string) {
    if ($string =~ /^([^(]*?),/) {
        push @params, $1;
        $string =~ s/^\Q$1\E\s*,?\s*//;
    } else {
        my ($ext, $pre);
        ($ext, $string, $pre) = extract_bracketed($string,'()','[^()]+');
        push @params, "$pre$ext";
        $string =~ s/^\s*,\s*//;
    }
}

这个支持:

  • 嵌套括号;
  • 空字段;
  • 任意长度的字符串.

这篇关于以逗号分隔,但仅当不在括号中时的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆