web-dev-qa-db-ja.com

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

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

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

variableName.someMethod()

で:

((TypeName)variableName.someMethod())

variableNameは、任意の変数名です。

sedでは、次のようなものを使用できます。

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

つまり、は一致した検索文字列を表します。 Eclipseには似たようなものがありますか?

ありがとう!

112
Dan

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

そう:

調べる: (\w+\.someMethod\(\))

置換:((TypeName)$1)

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

216
NomeN

使用する...
search =(^。* import)(。*)(\(。* \):)
replace = $ 1 $ 2

...交換...

from checks import checklist(_list):

...と...

from checks import checklist



正規表現のブロックは、括弧で囲まれています(先頭に「\」はありません)

(^。* import)は「fromチェックインポート」を見つけて$ 1にロードします(Eclipseは1でカウントを開始します)

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

(\(。* \):)は、「ブロック$ 2を開始した後、最初に遭遇した「(」で...ブロック$ 2を停止し、$ 3を開始します。$ 3には「( 'any text')または、この例では「(_list):」

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



Screenshot

6
RightmireM

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

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

置換:((TypeName)$ 1)

ここに:

検索中:

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

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

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

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

  • 「someMethod」は、検索されるとおりに指定されます。

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

交換:

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

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

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

4
padippist

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

replace: ((TypeName)$0)
2
Yaroslav Lyakh

Eclipseでregxpを使用する方法の説明と例が必要な人向け。ここに問題を説明する私の例があります。

enter image description here

名前を変更したい

/download.mp4^lecture_id=271

/271.mp4

これらは複数存在する場合があります。

方法は次のとおりです。

enter image description here

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

0
MadNik

空白行の空白を削除するための正規表現を探していました。検索する正規表現は次のとおりです。

^\s *\r?\ n

で置き換える

\ n

これを検索および置換ウィザードで使用するだけで、100%動作します。

0