Почему это регулярное выражение не может правильно разбить строку? - PullRequest
0 голосов
/ 10 января 2020

Это регулярное выражение (\((?>[^()]++|(?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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...