Не получать множественные замены в регулярных выражениях Perl - PullRequest
2 голосов
/ 10 июня 2011

Я пытаюсь выполнить несколько подстановок в одной строке текста, и, похоже, это не работает.

QUEUE(DLR_BRKR_TIXX_IN_PROD) TYPE(QLOCAL) CURDEPTH(0) QUEUE(DLR_BRKR_TIXX_OUT_PROD) TYPE(QLOCAL) CURDEPTH(0) QUEUE(TKT_BRKR_TIXX_IN_2) TYPE(QLOCAL) CURDEPTH(0) QUEUE(TKT_BRKR_TIXX_OUT_2) TYPE(QLOCAL) CURDEPTH(0)

Regex: s/QUEUE\(([^)]*)\).*CURDEPTH\((\d+)\)/\1:\2/g

Это только сопоставление и замена в первом совпадении: QUEUE (DLR_BRKR_TIXX_IN_PROD) ТИП (QLOCAL) CURDEPTH (0).

Я что-то упускаю очень очевидное?

Спасибо.

1 Ответ

4 голосов
/ 10 июня 2011

Я думаю, вы обнаружите, что на самом деле он совпадает с первого до последнего совпадения за один раз, потому что .* является жадным.

Попробуйте

s/QUEUE\(([^)]*)\).*?CURDEPTH\((\d+)\)/\1:\2/g

вместо.

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