2016-04-02 11 views
0

は、私はいくつかのエントリを持つ小さなJSONファイルを持って、ここにセクションです:私はすべての値の前に「\ U25」を追加する必要が実現Vimの代替コマンドと正規表現

"i":{ 
    "normale":"3c", 
    "bold":"4b", 
    "doppio":"6c"}, 
"is":{ 
    "normale":"2c", 
    "bold":"33", 
    "doppio":"66"}, 

ので、私

:%s:\("\)\(\d\d"\)\|\("\)\(\d\w"\):"\\u25\2アイデアは「DD」または「DW」のいずれかを検索し、"\u25 rest.Thisを保持したままで最初の二重引用符を置換することである

は結果である:このコマンドを試してみました

"i":{ 
     "normale":"\u25, 
     "bold":"\u25, 
     "doppio":"\u25}, 
    "is":{ 
     "normale":"\u25, 
     "bold":"\u2533", 
     "doppio":"\u2566"}, 

一致する文字列が2桁のみの場合、コマンドは正しく動作します。最初の二重引用符(最初のグループ)が置換され、2番目のグループはそのまま残ります。 しかし、一致する文字列に数字と文字が含まれる場合、文字列全体を置換して2番目のグループを無視するようです。 2つのパターンは同じですが、\wを除いて全く同じです。何が起こっていますか?

答えて

1

Vimと一致する数字は\dです。 16進数と一致させるには\xが必要です。

しかし、すべて:"の出現を:"\u25に置き換えたいと思われます。

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

:%s/:"/:"\\u25"/

それとも、あなたは2進数のすべての出現に\u25を付加したい場合は、

:%s/\x\x/\\u25&/

+0

なるほど!ニースとクリーン、私はそれを実現しませんでした。だから、おそらく私のコマンドがうまくいかなかったのは、 "dw"は "次の文字を持つ数字"の代わりに16進文字であると認識されているからです。 –

+1

'\ d'は10進数字と一致し、' \ x'は16進数字と一致します。 –

関連する問題