извлечение данных в [a, b, c] и разделение их запятыми - PullRequest
0 голосов
/ 05 января 2019
my $str = "a, [b,c,d], k , [p,q,r], k, [x,y,z]";

Я хочу удалить запятые между [], чтобы получить вывод в виде:

"a, [b c d], k , [p q r], k, [x y z]"

Я пытался извлечь данные между [], но не смог.

Возможно ли это?

Спасибо и всего наилучшего,

Amar

1 Ответ

0 голосов
/ 05 января 2019

Если квадратные скобки всегда правильно спарены и отсутствует экранирующий механизм, вы можете просто удалить все запятые, за которыми следует ], если между ними нет [:

$str =~ s/,(?=[^\[]*\])/ /g;

Он использует утверждение «упреждения», то есть (?=...), которое содержит [^\[]*, то есть класс символов, который содержит что угодно, кроме [, повторяется ноль или более раз, за ​​которым следует ]. Таким образом, он совпадает только тогда, когда за запятой следует любое количество не [ символов, за которыми следует ], что означает, что оно должно быть в квадратных скобках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...