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
Если квадратные скобки всегда правильно спарены и отсутствует экранирующий механизм, вы можете просто удалить все запятые, за которыми следует ], если между ними нет [:
]
[
$str =~ s/,(?=[^\[]*\])/ /g;
Он использует утверждение «упреждения», то есть (?=...), которое содержит [^\[]*, то есть класс символов, который содержит что угодно, кроме [, повторяется ноль или более раз, за которым следует ]. Таким образом, он совпадает только тогда, когда за запятой следует любое количество не [ символов, за которыми следует ], что означает, что оно должно быть в квадратных скобках.
(?=...)
[^\[]*