发布于 2020-01-09 12:33:32
这方面的单个正则表达式非常复杂,很难维护或扩展。下面是一种迭代解析器方法:
use strict;
use warnings;
my $str = 'a , (b) , (d$_,c) , ((,),d,(,))';
my $nesting = 0;
my $buffer = '';
my @vals;
while ($str =~ m/\G([,()]|[^,()]+)/g) {
my $token = $1;
if ($token eq ',' and !$nesting) {
push @vals, $buffer;
$buffer = '';
} else {
$buffer .= $token;
if ($token eq '(') {
$nesting++;
} elsif ($token eq ')') {
$nesting--;
}
}
}
push @vals, $buffer if length $buffer;
print "$_\n" for @vals;
您可以使用解析器::MGC更抽象地构造这种解析器。
发布于 2020-01-09 11:50:44
https://stackoverflow.com/questions/59671144
复制相似问题