Описание тега nirvana
Я не могу видеть, как это могло быть сделано только с СЭД, поскольку нормальные регулярные выражения не должны быть в состоянии соответствовать вложенные скобки. К счастью, такие вещи, как Perl поддерживает не-так-регулярные выражения тоже, как это украли из ответов здесь:
эхо "в сторону (в ( боковой ( ) ) удалить ( помещений ) ) (в очередной раз )." |
на Perl -плз с/\(([^()]|(?Р))*\)/ местные $_ = $&; С\С+, Г; $_ /Е. Г.'
из сторон (в(боковой())remove(убрать пробелы)) из (inagain).
(Не)регулярное выражение работает следующим образом:
\(([^()]+|(?Р))*\)
^^| | ||^^ -- буквальные скобки, внутри которых:
^ ^ ^| --- группа с выбором:
^^^^^^ ^^^^ | ---- ничего, кроме скобок, любое количество,
Или вся эта картина снова.
^ ----- любое количество из этих двух вариантов
Запасная часть исполняет соответствующую строку из $&
, изменяет его в локальной переменной, удаление всех пробельных символов, и возвращает измененное значение. (с///
не работает на $&
или $1
непосредственно.)
Хотя это проще, если вы знаете, у вас есть только один набор скобок в одной строке, так что может совпадать с первой (
последней )
.
эхо "(в ( сторону) вот ) снова." |
на Perl -ПЭ с/\(.*\)/ $_ = $&; с\с+, г; $_ /е'
(в(сторону)вот) снова.
Отказ от ответственности: я не знаю, если с помощью $_
ВНУТРИ С///Е
может сломаться, но это, кажется, работает для меня.