Не удается получить несколько замен в Perl regex

#regex #perl

#регулярное выражение #perl

Вопрос:

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

 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
  

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

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

Спасибо.

Комментарии:

1. вы всегда должны включать предупреждение при разработке кода на Perl.

Ответ №1:

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

Попробуйте

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

вместо этого.

Комментарии:

1. Ты опередил меня на несколько секунд:-( , 1.

2. sunofa. Я попробовал не жадное сопоставление, но в другом месте. Спасибо!