0

正規表現を使用してすべてを置き換えるメカニズムはありますが、一致したものは保持し".*"ますか?

これが正規表現の一部ではなく、一部のエディターで可能である場合は、その旨を記載してください。

4

2 に答える 2

3

「foo」を括弧内にあるものからスペースで区切り、全体を括弧で囲みたいと仮定します。

:%s/foo\(.*\)/(foo \1)/g

\1、最初の括弧内のテキストを表します。\2別の括弧のグループ化などがある場合に使用できます。

あなたが持っていたとしたら fooMOO

あなたは次のようになります: (foo MOO)

于 2012-07-14T22:57:30.877 に答える
1

置換パターンで後方参照を使用できます。

%s/foo(\(.*\))/foo \1/g

このパターンでは、エスケープされていない括弧はテキスト内の実際の括弧と一致しますが、エスケープされた括弧はキャプチャー括弧として機能します。\1 は後方参照であり、正規表現の最初のキャプチャ用括弧のセット内で一致したすべてのものを参照します。1 行に複数の関数呼び出しがある場合は、一致する文字数を制限する必要があることに注意してください。foo() の引数リスト内 (たとえば、文字列内) に閉じ括弧を使用する危険がない場合は、閉じ括弧を一致させないようにすることをお勧めします。

%s/foo(\([^)]\))/foo \1/g

引数リスト内に閉じ括弧がある危険性がある場合、事態は複雑になります。

于 2012-07-14T22:57:40.187 に答える