Eclipseでは、正規表現の検索と置換を実行するときに、一致した検索文字列を置換文字列の一部として使用できますか?
基本的に、私はすべての出現を置き換えたい
variableName.someMethod()
で:
((TypeName)variableName.someMethod())
variableNameは、任意の変数名です。
sedでは、次のようなものを使用できます。
s/[a-zA-Z]+\.someMethod\(\)/((TypeName)&)/g
つまり、&は一致した検索文字列を表します。 Eclipseには似たようなものがありますか?
ありがとう!
はい、「()」はグループをキャプチャします。 iがi番目のキャプチャグループである$ iで再び使用できます。
そう:
調べる:
(\w+\.someMethod\(\))
置換:
((TypeName)$1)
ヒント: CTRL + Space テキストボックスには、正規表現を書くためのあらゆる種類の提案があります。
使用する...
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つだけに置き換えます。
NomeN は正しく答えましたが、この答えは私のような初心者にはあまり役に立ちません。解決する別の問題があり、そこでRegExを使用する方法がわからないからです。そこで、これに少し説明を加えています。答えは
検索:(\ w + \。someMethod \(\))
置換:((TypeName)$ 1)
ここに:
検索中:
最初と最後の '(' ')'は正規表現のグループを表します
'\ w'は単語(英数字+アンダースコア)を表します
「+」は1つ以上を表します(1つ以上の英数字+アンダースコア)
「。」は、任意の文字を表す特殊文字です(つまり、。+は任意の文字の1つ以上を意味します)。これは「。」を表す特別な文字だからですエスケープ文字、つまり「。」を指定する必要があります
「someMethod」は、検索されるとおりに指定されます。
2つの括弧 '('、 ')'は、グループを表すために使用される特殊文字であるため、エスケープ文字とともに指定されます(グループについては次の点で説明します)
交換:
「((TypeName)$ 1)」が与えられます。ここで、$ 1はグループを表します。これは、検索フィールドの最初と最後の括弧 '('、 ')'で囲まれたすべての文字です
また、置換ボックスの検索で「正規表現」オプションをオンにしていることを確認してください
RegExの詳細については、 http://regexr.com/ をご覧ください。
少なくともSTS(SpringSource Tool Suite)グループには0から始まる番号が付けられているため、置換文字列は
replace: ((TypeName)$0)
Eclipseでregxpを使用する方法の説明と例が必要な人向け。ここに問題を説明する私の例があります。
名前を変更したい
/download.mp4^lecture_id=271
に
/271.mp4
これらは複数存在する場合があります。
方法は次のとおりです。
次に、検索/置換ボタンを押します
空白行の空白を削除するための正規表現を探していました。検索する正規表現は次のとおりです。
^\s *\r?\ n
で置き換える
\ n
これを検索および置換ウィザードで使用するだけで、100%動作します。