首先,您需要决定什么构成括号,以及它们是否可以嵌套。(对于此答案,我将假设它们可以)。然后,您需要从文本中删除这些括号块,并用占位符替换它:
my @parens;
$str =~ s/( \( (?: (?0)|[^()] )* \) )/push @parens, $1; "PARENS_$#parens"/gex;
现在你剩下的东西看起来像这样:
'100% California Grown Olives, Water, Salt And Ferrous Gluconate PAREN_0,asasd,
sadasdas.'
现在很容易将其按逗号分割。然后在每个分割片段上,扫描PAREN_\d+
标记,并用@parens
数组中的标记替换它们。根据您的源内容,您可能需要使用更独特的占位符名称。
类似这样:
s/PARENS_(\d+)/$parens[$1]/ge for my @segs = split /,\s*/ => $str;
say for @segs;
举个例子,对于一个字符串:
my $str = "foo (b,a,r), baz (foo, (bar), baz), biz";
打印:
foo (b,a,r)
baz (foo, (bar), baz)
biz