2011-06-10 105 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