2011-06-10 77 views
2

我正試圖在一行文本上執行多個替換,並且它似乎沒有工作。在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 

這僅匹配而代在第一匹配:QUEUE(DLR_BRKR_TIXX_IN_PROD)TYPE(QLOCAL)CURDEPTH(0)。

我是否錯過了一些非常明顯的東西?

謝謝。

+1

您應該在開發Perl代碼時始終啓用警告。 – tadmc 2011-06-10 14:52:40

回答

4

我想你會發現它實際上匹配從第一次到最後一場比賽,因爲.*是貪婪的。

嘗試

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

代替。

+1

你打我幾秒鐘:-(,+1。 – Toto 2011-06-10 14:34:37

+0

我也是。嘆息,+1。 – 2011-06-10 14:52:12

+0

sunofa。我試過非貪心的匹配,但在不同的位置。謝謝! – DaveOfTheDogs 2011-06-10 18:12:42