perl - 以逗号分隔,但仅当不在括号中时

标签 perl split

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

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

如果我像上面那样进行拆分,数组将有值
ab
12
20100401
xyz(A,
B)

我需要如下值。
ab
12
20100401
xyz(A,B) 

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

最佳答案

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

这个支持:
  • 嵌套括号;
  • 空旷的田野;
  • 任意长度的字符串。
  • 关于perl - 以逗号分隔,但仅当不在括号中时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5049358/

    相关文章:

    允许您设置起点和终点并保持 HTML 格式的 PHP substr() 函数?

    java - 除非在双引号中,否则在空格上拆分字符串,但双引号可以附加一个前面的字符串

    java - 一个简单的 string.split() 出了可怕的错误

    python - Pandas 数据框

    linux - 在 Bash 中从另一个较大文件中查找文件行的最快方法

    php - 正则表达式:必须以字母或数字开头,其余可以是任何内容

    perl - 如何检查使用 IPC::open3 执行的命令是否挂起?

    linux - 如何通过SSH成为 super 用户

    perl - 在 Perl 中模拟父类(super class)调用(使用 Test::MockObject)

    vba - 使用不一致的分隔符拆分字符串