2011-06-10 18 views
2

1行のテキストに複数の置換を実行しようとしていますが、動作していないようです。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

答えて

4

.*は貪欲であるため、実際には1回の試合で最初の試合と最後の試合が一致することがわかります。

ではなく

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

を試してみてください。

+1

あなたは秒間私を打ち負かしました:-(、+1。 – Toto

+0

私も。一口、+1。 –

+0

sunofa。私は非欲張りのマッチングを試みましたが、別の場所です。 – DaveOfTheDogs

関連する問題