Eclipse、正規表現の検索と置換


119

日食では、正規表現の検索と置換を実行するときに、一致した検索文字列を置換文字列の一部として使用できますか?

基本的に、私はすべての出現を置き換えたいです

variableName.someMethod()

と:

((TypeName)variableName.someMethod())

ここで、variableNameは任意の変数名にすることができます。

中には、sedの私のようなものを使用することができます:

s/[a-zA-Z]+\.someMethod\(\)/((TypeName)&)/g

つまり、は一致した検索文字列を表します。Eclipseにも同様のものはありますか?

ありがとう!


Eclipseの正規表現の良いドキュメント:help.eclipse.org/kepler/...
Kolobキャニオン

回答:


225

はい、「()」はグループをキャプチャします。$ iで再び使用できます。iはi番目のキャプチャグループです。

そう:

探す: (\w+\.someMethod\(\))

交換: ((TypeName)$1)

ヒント:テキストボックスのCTRL+ Spaceは、正規表現を書くためのあらゆる種類の提案を提供します。


これは良い答えであり、役に立つヒントでもあります。もう少し詳しく説明されていれば、もっと役立つでしょう。
iammilind 2013年

Bravo Eclipse、あなたはこの機能を適切に実装しました!
Kenogu Labz 2013

私は特に「Unicode文字の16進コード」の例が大好きです:)
Stewart Murrie

本当に役立つコードをいくつか追加したいと思います。すべてstringVar.equals("xxx")をに置き換える必要がありました"xxx".equals(stringVar)。検索/置換ダイアログで次の正規表現を使用しました:search: ([^()! ]+).equals\("(.*)"\)replace: "$2".equals\($1\)
LaDude、2014年

私のためではありません。常に最初のグループを置き換えます...?
RightmireM、2015年

6

使用...
検索=(^。* import)(。*)(\(。* \):)
置換= $ 1 $ 2

...交換...

from checks import checklist(_list):

...と...

from checks import checklist



正規表現のブロックは、括弧( "\"が前に付いていない)で区切られます)

(^。* import)は、 "from check import"を見つけ、それを$ 1にロードします(Eclipseは1から数え始めます)

(。*)次の "を見つけます次に遭遇するまで「すべて」「(」をロードして$ 2にロードします。$ 2は次の部分のために「(」で停止します

(下の次の行を参照) (\(。* \):)は「最初に遭遇したとき」( "ブロック$ 2を開始した後...ブロック$ 2を停止して$ 3を開始します。$ 3は"( 'any text'): "、または例では"(_list): "がロードされます。

次に、置換で、単に$ 1 $ 2は、3つすべてのブロックを最初の2つだけに置き換えます。



スクリーンショット


3

NomeNは正しく答えましたが、このような答えは私のような初心者にはあまり役に立ちません。解決すべき別の問題があり、そこでRegExを使用する方法がわからないためです。これについて少し説明を加えます。答えは

検索:(\ w + \。someMethod \(\))

置き換え:((TypeName)$ 1)

ここに:

検索中:

  • 最初と最後の '(' ')'は正規表現のグループを表します

  • '\ w'は単語を表します(英数字+アンダースコア)

  • 「+」は1つ以上を示します(つまり、1つ以上の英数字+アンダースコア)

  • 「。」任意の文字を表す特殊文字です(つまり、。+は任意の文字の1つ以上を意味します)。これは「。」を表す特殊文字だからです。エスケープ文字、つまり「。」を指定する必要があります。

  • 'someMethod'が検索対象として指定されています。

  • 2つの括弧「( '、')」は、グループを表すために使用される特殊文字であるため、エスケープ文字とともに指定されます(グループについては、次のポイントで説明します)。

代わりに:

  • ' ((TypeName)$ 1) ' が与えられ、ここで$ 1はグループを表します。これは、検索フィールドの最初と最後の括弧 '('、 ')'で囲まれたすべての文字です

  • また、置換ボックスの検索で「正規表現」オプションをオンにしたことを確認してください

RegExの詳細については、http: //regexr.com/を参照してください。


2

少なくともSTS(SpringSource Tool Suite)グループには0から始まる番号が付けられているため、置換文字列は

replace: ((TypeName)$0)

5
それは真のアファイクではありません。$ 0は元の検索語句全体を表します。この場合、偶然にもうまくいくと思います。
Walter Heck、

0

Eclipseでregxpを使用する方法の説明と例が必要な人のために。これが問題を説明する私の例です。

ここに画像の説明を入力してください

名前を変更したい

/download.mp4^lecture_id=271

/271.mp4

そして、これらは複数存在する可能性があります。

これがどのように行われるべきかです。

ここに画像の説明を入力してください

次に、検索/置換ボタンを押します

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