Это регулярное выражение (\((?>[^()]++|(?1))*\))(*SKIP)(*F)|,
соответствует запятым, которые не указаны в скобках. Я пытался использовать его, чтобы разбить строку "ab,cd"
. Он должен совпадать на запятой и разбивать строку на массив размера 2, но я получаю массив размера 3 с пустым вторым элементом.
https://regex101.com/r/TUa9M3/1
my $re1 = qr/(\((?>[^()]++|(?1))*\))(*SKIP)(*F)|,/;
my $re2 = qr/,/;
my $str = "ab,cd";
my @arr1 = split(/$re1/g,$str);
print scalar @arr1 . "\n";
print "$_\n" for @arr1;
my @arr2 = split(/$re2/g,$str);
print scalar @arr2 . "\n";
print "$_\n" for @arr2;
Вывод:
3
ab
cd
2
ab
cd