2012-08-07 9 views
15

私はこれはかなり簡単な解決策だと思うが、私は約1時間の答えを見つけようとしており、それを理解できないようだ。Vim Regex Replace

私のような、103で始まり、同じ4桁の数字が続く123に4桁の数字が続いている一連の番号を代わるのVimで検索/置き換えをやろうとしている:

1033303 - >1233303
1033213 - >1233213

私が来た最も近いがこれです:

%s/103\d\{4}/123\0/g 

しかしこれは、次のような、\0によって一致している全体の数になり:

1033303 - >

1231033303はあなたが非常に接近している任意のヘルプ

答えて

21

いただき、誠にありがとうございます

%s/103\(\d\{4}\)/123\1/g 

\(\)の間のパターンは、\1、でアクセスできるサブマッチですなどの順番で表示されます。詳細は、:help \(を参照してください。

2

は、キャプチャグループを使用します。

%s#103\(\d\{4}\)#123\1#g 
1

はこれを試してみてください!

:%s/103\ze\d\{4}/123/g 

\zeは、そこでのマッチの終了を設定します。これによりパターン全体を一致させることができますが、パターンの一部だけを置換します。

:h /\ze 
:h /\zs 
6

今W/Oキャプチャグループ:

%s/103\(\d\{4}\)/123\1/g 
+0

* after the zeは、無視された後にいつも変わっていますか? – SergioAraujo

+0

はい、それは同じ行のより多くのマッチを防ぐでしょう –

+0

これはここで働きました: '%s、103 \ ze。*、123、g'デリミタを変更して(速くタイプする)、その後のすべての文字を'。* '置換時に無視されます。 – SergioAraujo