2012-01-18 5 views
9

パターンを一致させ、パターンの一部を置き換え、パターン内の変数を置換文字列の一部として使用したいと考えています。正規表現:パターンの一部を置き換え、その中の変数を参照するにはどうすればよいですか?

これは間違いありませんか?英語で

/s/^((\s+)private\sfunction\s__construct\(\))/(2)def\s__init__

:空白の同じ量と文字列で文字列"private function __construct()"に続く空白の任意の量を交換してください。だから、私の正規表現は悪いですか?

partial replace

+1

これはどの言語/アプリケーションで使用していますか? (データが入っている言語ではなく、式を実行している言語ではありません) – FakeRainBrigand

+0

@FakeRainBrigand 'Vi'。 –

答えて

6

これは後方参照と呼ばれ、あなたは、パターンからi番目のキャプチャグループを参照するために\iを使用しています。

だからパターン^((\s+)private\sfunction\s__construct\(\))のため、交換が\2def __init__です。

+0

これはもう一つの例です: ':s/^((\ s +)$ this - >)。* $/\ 2self。/'。ご覧のとおり、 '^(\ s +)this - >。* $'を探していますよね?しかし、私は検索パターンのこの部分を置き換えたいだけです: '\ s + this->'。だから、2組の括弧を使いました.... '\ 2'や' \ 1'を参照すべきでしょうか? –

+0

キャプチャ括弧は左から右に数えるので、その例では '\ 1'です。これはviであるので、正規表現のビットをエスケープする必要があります。@ PrashantBhateの答えを見てください。どちらか、あるいは私はvimで正規表現を使うのに '\ v'フラグを使いますが、viがそれを持っているかどうかは分かりません。 –

12

は、私はあなたが

:s/^\(\s\+\)private function __construct()/\1def __init__/g 

あなたのパターンに最初の

:s/^\(\s\+\)private function __construct()/\1def __init__/ 

いくつかの提案を交換してくださいすべてのオカレンス置き換えvi

でそれを交換したいと推定

  • /は、検索のためにviで使用されている、あなたは私が交換
  • \sに参照グループ化されたパターンをバックアップする\1\2などのx番目のキャプチャグループであるVIで()
  • 使用\iを使用することはできませんエスケープする必要が:
  • を使用あなたはすべての出現に
を交換したい場合は置換テキストで /g末尾 ' '代わり
  • 使用を使用

    http://vimregex.comをご利用ください。

  • +0

    しかし、ここに問題があります。私が '{$ \ n \ r replaceme'を持っているなら、{$ \ n \ r \ s + replaceme ^'を検索したいです。 + replaceme'です。私がこれをしたいのは、 "replaceme"の前に '{$ \ n \ r'がない時があり、それらのコマンドを有効にしたくないからです。だから、 "replaceme"を '{$ \ n \ r'の前に置き換えて、置き換えを同じ量の空白で開始することはできますか? –

    2

    私は誰も本当に質問を理解していないと思う。

    "置換パターンを検索する場合は、パターンaで置換する文字列パターンiをパターンで始まる場合にのみ置き換えてください。 :/(パターンb)(パターンa)/(パターンb)(i)/ g "のように、置換文字列にパターンbを含める必要があります。

    これはちょっと読みにくいですが、読む価値があります。

    これまでは、pattern bを実際にはpattern bに置き換えないようにするために多くのリソースを節約できると思っていました。たぶんそれは自動的に起こります。私はviやその他のプログラムで組み込みメソッドを見つけられませんでした。私はそれを行うためのスクリプトを書くことができると確信しています。

    関連する問題