正規表現はマッチの一部に文字列を追加します


1

私はこれをするのがかなり難しいと思います、事は以下の通りです:

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

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

そして私は文字列を追加したい _VIEW シンボルの末尾まで問題は私がマッチしたいだけではないということです パートナー しかし、他のシンボルも同様に、私はこの正規表現を試しました:

見つける:

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

と置換する:

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

しかし、私はちょうど手に入れました:

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

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

回答:


0

間違っている主なことは、で区切られた一致したフィールドです。 ( そして ) によって識別される必要がある \1 置換文字列では:

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

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

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

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

他の、より単純な検索と置換の文字列が私にはありますが、ファイル内の他の文字列のコンテキストを見なくても、どちらが満足のいくものかわからない。しかし、以下は大丈夫です: -

サーチ:

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

交換します。

\1_VIEW\;

末尾を除いた文字列全体 ; 一致している _VIEW 追加されます。


しかし、なぜ括弧はエスケープする必要があるのでしょうか。それらは私が一致させる必要がある文字列の一部ではありませんが、とにかく私が私のコンピュータに着いたらすぐにこの解決策を試すつもりです。ありがとうございました。
arielnmz

正規表現を使用する多くのプログラムのデフォルトはBRE(基本正規表現)モードで、これはエスケープが必要です。見る ウィキペディア 。私があなたの弦をテストした時 sed バックスラッシュが必要でした。
AFH

私はそれを知りませんでした、しかし多分Geanyはデフォルトでそのモードを使いません。
arielnmz

私はGeanyを知らないので、多分あなたはバックスラッシュを必要としません、しかしあなたは確かに必要です \1 マーク付けされた部分式を展開するための置換ストリーム最初にこれを使ってみてください、そして必要ならばブラケットにバックスラッシュを追加してください。
AFH

ただ試してみて、魅力のように動作します!ありがとうございました!私は、grepのフィールドにマッチするシステムについて本当によく知りませんでした。ありがとうございました。
arielnmz

0

AFHの答えを拡張するために、もっと複雑な例を作りました。

変更される文字列:

abc: 123

サーチ:

(abc)\: (123)

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

\1def \2456

結果:

abcdef 123456
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.