2012-01-11 5 views
1

を検索と置換テキスト角括弧にマッチし、どのような角括弧内に含まれている:正規表現:私は(a)に一致し、(b)は、以下の出現置き換えるしようとしています、その後

array[0] -> atoi(array[0]) 
array[1] -> atoi(array[1]) 
... 
array[i+1] -> atoi(array[i+1]) 

などを...

もさらにSE(a)のIはarray\\[.\*?\\]、次の式array\\[(.\*?)\\]を使って何を一致させることができません、またはarray\\[*\\]

私はarray\\[.\\]と括弧の間に単一の文字の出現を一致させることができるよと倍数とgmentsはarray\\[.*\\]を持つ単一の行に一致する

(b)は、私はまあ、あなたが本当に何を正規表現エンジンあなたの言うことはありません。しかしarray\\[.\\]atoi(array[])

+0

、あなたの問題のコードのセクションを持っている場合は、あなたがそれらを適切にフォーマットするCTRL-Kまたはツールバーボタンを使用することができます。奇妙な二重引用符を入れる必要はありません。 – Benoit

答えて

2

どのように?

:s/\<array\[[^\]]\+\]/atoi(\0)/ 
+0

ありがとうございます:s /配列\\ [\ d \\]/atoi(\ 0)/ "すべての参照を数値で正しく置き換えるために機能します。例:array [0] - > atoi(array [0]) しかし、私はまだ括弧内の他のインデックスと一致することができません – encore2097

+0

それは美しく動作し、接頭辞付きの "\ <"の有無にかかわらず動作します。あなたはそれだけでなく、reg前の良さを説明することができますか? 私はそれを "\\ ["開始括弧、[^ \\]]、\ + 1回以上の出現(なぜこれをエスケープしますか?)、そして "\\"テキストで置換して一致させる – encore2097

+0

@ encore2097 '\ <'は単語の先頭を意味し、 '\>は単語の最後を意味する。 Vimでは、検索パターンの構文はgrepの基本的なパターン構文(主に)に従います。そのため、**複数のオカレンスに対して '+'の代わりに '\ +'が必要です**。 – shinkou

0

をもたらしたことをしようと、s/"MATCHING REGEX"/atoi(array\[\1\])/gが動作するはず把握作業試合後私が推測しなければならないのであれば、この特定のエンジンは "貪欲でない"修飾子を好まないかもしれません。だから、非欲張りの修飾子を除外し、非貪欲な "。*?"の代わりに "角かっこを閉じない"という文字クラスを使用して、正規表現を試してみましょう。代わりにこれを試してみてください。これについて

配列[([^]] *)]

+0

私はVimのデフォルトを使用しています。私は複数があったことを知らなかった、私はreg exが標準だと思った - 私に知らせてくれてありがとう。あなたが提供した正規表現は一致しません。 – encore2097

1

あなたは使用することができます。

:s/array\[.\{-}\]/atoi(&) 
関連する問題