web-dev-qa-db-ja.com

正規表現は、一致の一部に文字列を追加します

私はこれを行うのは非常に難しいと思います、事は次のとおりです:

次の形式の文字列があります。

GlobalParameters::$docId = DocList::$PARTNERS;

そして、文字列_ VIEWをシンボルの最後に追加したいと思います。問題は、[〜#〜] Partners [〜#〜]だけでなく、他のシンボルも一致させたいということです。そこで、この正規表現を試しました。

検索:

GlobalParameters\:\:\$docId\ \=\ DocList\:\:\$(.*)\;

と置換する:

GlobalParameters\:\:\$docId\ \=\ DocList\:\:\$(.*)_VIEW\;

しかし、私はちょうど得ました:

GlobalParameters::$docId = DocList::$(.*)_VIEW;

すべての試合で。どうすればこれを回避できますか?

1
arielnmz

主な誤りは、()で区切られた一致フィールドを、置換文字列の\1で識別する必要があることです。

GlobalParameters\:\:\$docId\ \=\ DocList\:\:\$\1_VIEW\;

Geanyの実装にはこのデフォルトがありませんが、正規表現を使用する多くのプログラムはデフォルトでBRE(基本正規表現)モードになっているため、検索を区切るには\(\)が必要です。次のような部分式:

GlobalParameters\:\:\$docId\ \=\ DocList\:\:\$\(.*\)\;

注:v1.24以降のGeanyでは、括弧をエスケープする必要がないため、一致するフィールドを区切るには()だけが必要です。

他のより単純な検索と置換の文字列が私に起こりますが、ファイル内の他の文字列のコンテキストを見ずに、どちらが満足できるかわかりません。ただし、次の点で問題ありません。-

探す:

\(GlobalParameters\:\:\$docId\ \=\ DocList\:\:\$.*\)\;

交換:

\1_VIEW\;

ここでは、末尾の;を除く文字列全体が一致し、_VIEWが追加されます。

0
AFH

AFHの答えを拡張するために、私はより複雑な例を作成しました。

変更される文字列:

abc: 123

探す:

(abc)\: (123)

置換(1defは最初の一致式に追加され、456は2番目に追加されます):

\1def \2456

結果:

abcdef 123456
0
Sebastiano Pera