2010-11-30 15 views
1

ファイル内の特定の正規表現パターンを囲む引用符を取り除かなければならなかったケースがありました。私はすぐにvimの検索を使用してutilを置き換え、元のパターンと置き換えパターンのそれぞれの特殊文字をエスケープするだけでした。正規表現のリテラルをテキストで検索するには?

これは(ちょっとしたやりかたの後で)うまくいきましたが、このようなことをするより良い方法があるかどうか疑問に思いました。

元の正規表現(引用された): s/'\/\^\\\/\/'/\/\^\\\/\//g

ありがとう:/^\//

と交換する'/^\//'と検索/私が使用するパターンを交換してください!

答えて

4

ほとんどすべての文字を正規表現の区切り文字として使用できます。これにより、スラッシュをエスケープする必要がなくなります。また、グループを使用して正規表現を抽出し、再入力を避けることもできます。たとえばあなたが記載されているので、これはあなたのケースのために働く場合

:s#'\(\\^\\//\)'#\1# 

は、私にはわからないと、あなたが与えた正規表現が一致しません:たとえば、これを試してみてください。あなたがリストした正規表現は、'\^\//'ではなく、'/^\//'と一致します。私は後者と一致します。必要に応じて調整してください。

+0

vimの検索/ utilをグループ化するヒントを教えてくれてありがとう - 私は、$ 1構文を使って動作しないグループを参照しようとしました。マッチしない正規表現の良いキャッチも、私はオリジナルと置換を間違えた。 –

1

良い単純な文字列検索を使用して完全に正規表現を使用しないでください。

+0

これは、vimの検索と置換ツールを使って文字列検索を行うことは可能ですか、それを行うにはvim内に別のツールがありますか?おそらく、あなたはfgrepに置換文字列を与えることができますか?これは、この特定のケースでの実装についてのいくつかの詳細と、良い答えかもしれません。 –

0

これはあなたのために働くかどうかを確認してください - この代替-式の前に行番号を定義したり、その上にカーソルを置く:

:S: '\(* \。)':\ 1:

私はこれにvim 7.1を使用しました。もちろん、前に領域を視覚的にマークすることができます(この表現には "v"または "V"を使用してカーソルを移動します)。

+0

このパターンは、指定された行の一重引用符で囲まれた文字列の最初のものを置き換え、末尾に '(vim7.2)を残しているようです。おそらく、最初の行と最後の行の間のすべてのテキストを貪欲に一致させたいパターン(try/'\(。* \)')と関係があります。それにかかわらず、式が一重引用符で囲まれた文字列の最初の引用符を置き換えるので、この例を使用する唯一の安全な方法は、引用符をつけたくない各文字列を視覚的にマークすることです。 –

+0

私は上記の文を試しました)をvim7.3でコンパイルしたのは、シェルでvimのみを使用しているため、 "CONF_OPT_GUI = --disable-gui"と "CONF_OPT_X = --without-x"のコメントを除いて、変更されていないMakefileを通して与えられたものです。 vim7.3でも以下の入力( "..."の間)に実際に働いていました: "元の正規表現(引用符):/^\ /"で置き換えられる '/^\ //'同じ行にその入力を2回以上含む行ではありません。次の式を試してください:s: '\\(。\ { - } \\)':\ 1:g – shindojin