Eclipse, pencarian dan penggantian ekspresi reguler

119

Dalam gerhana, apakah mungkin menggunakan string pencarian yang cocok sebagai bagian dari string pengganti saat melakukan pencarian ekspresi reguler dan penggantian?

Pada dasarnya, saya ingin mengganti semua kemunculan

variableName.someMethod()

dengan:

((TypeName)variableName.someMethod())

Di mana variableName dapat berupa nama variabel apa saja.

Dalam sed aku bisa menggunakan sesuatu seperti:

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

Yaitu, & mewakili string pencarian yang cocok. Apakah ada yang serupa di Eclipse?

Terima kasih!

Greg
sumber
Dokumentasi yang baik tentang Eclipse RegEx: help.eclipse.org/kepler/…
Kolob Canyon

Jawaban:

225

Ya, "()" menangkap sebuah grup. Anda dapat menggunakannya lagi dengan $ i di mana saya adalah grup penangkapan ke-i.

Begitu:

Cari: (\w+\.someMethod\(\))

menggantikan: ((TypeName)$1)

Petunjuk: CTRL+ Spacedi kotak teks memberi Anda semua jenis saran untuk penulisan ekspresi reguler.

NomeN
sumber
Itu jawaban yang bagus dan petunjuk yang berguna. Akan lebih membantu jika dijelaskan secara lebih rinci.
iammilind
Bravo Eclipse, Anda telah menerapkan fitur ini dengan benar!
Kenogu Labz
Saya terutama menyukai contoh untuk "Kode Hex untuk karakter Unicode" :)
Stewart Murrie
Saya ingin menambahkan beberapa kode yang sangat membantu saya. Saya perlu mengganti setiap stringVar.equals("xxx")dengan "xxx".equals(stringVar). Saya menggunakan regex berikut dalam dialog temukan / ganti: search: ([^()! ]+).equals\("(.*)"\), replace: "$2".equals\($1\).
LaDude
Bukan untuk saya. Selalu menggantikan grup pertama ...?
RightmireM
6

Menggunakan ...
search = (^. * Import) (. *) (\ (. * \) :)
ganti = $ 1 $ 2

... menggantikan ...

from checks import checklist(_list):

...dengan...

from checks import checklist



Blok dalam ekspresi reguler digambarkan dengan tanda kurung (yang tidak didahului dengan "\")

(^. * Import) menemukan "dari check import" dan memuatnya ke $ 1 (gerhana mulai dihitung pada 1)

(. *) Temukan berikutnya " semuanya "sampai pertemuan berikutnya" ("dan ​​memuatnya ke $ 2. $ 2 berhenti di" ("karena bagian berikutnya (lihat baris berikutnya di bawah)

(\ (. * \) :) mengatakan" saat pertama kali ditemukan "( "setelah memulai blok $ 2 ... hentikan blok $ 2 dan mulai $ 3. $ 3 dimuat dengan" ('teks apa pun'): "atau, dalam contoh," (_list): "

Kemudian di ganti, cukup letakkan $ 1 $ 2 untuk mengganti ketiga blok hanya dengan dua yang pertama.



Screenshot

RightmireM
sumber
3

NomeN telah menjawab dengan benar, tetapi jawaban ini tidak akan banyak berguna untuk pemula seperti saya karena kita akan memiliki masalah lain yang harus diselesaikan dan kita tidak akan tahu bagaimana menggunakan RegEx di sana. Jadi saya menambahkan sedikit penjelasan untuk ini. Jawabannya adalah

pencarian: (\ w + \. someMethod \ (\))

ganti: ((TypeName) $ 1)

Sini:

Dalam pencarian:

  • '(' ')' Pertama dan terakhir menggambarkan grup dalam ekspresi reguler

  • '\ w' menggambarkan kata-kata (alfanumerik + garis bawah)

  • '+' menggambarkan satu atau lebih (yaitu satu atau lebih alfanumerik + garis bawah)

  • '.' adalah karakter khusus yang menggambarkan karakter apa pun (mis. + berarti satu atau lebih karakter apa pun). Karena ini adalah karakter khusus untuk menggambarkan '.' kita harus memberikan karakter pelarian dengannya, yaitu '.'

  • 'someMethod' diberikan seperti yang akan dicari.

  • Kedua tanda kurung '(', ')' diberikan bersama dengan karakter escape karena merupakan karakter khusus yang digunakan untuk menggambarkan sebuah grup (kita akan membahas tentang grup di poin selanjutnya)

Sebagai pengganti:

  • Diberikan ' ((TypeName) $ 1) ', di sini $ 1 menggambarkan grup. Itu adalah semua karakter yang diapit dalam tanda kurung pertama dan terakhir '(', ')' di bidang pencarian

  • Pastikan juga Anda telah mencentang opsi 'Ekspresi reguler' di kotak cari ganti

Informasi lebih lanjut tentang RegEx dapat ditemukan di http://regexr.com/ .

padippist
sumber
2

Setidaknya di grup STS (SpringSource Tool Suite) diberi nomor mulai dari 0, jadi ganti string akan diberi nomor

replace: ((TypeName)$0)
Yaroslav Lyakh
sumber
5
Itu tidak benar afaik. $ 0 mewakili seluruh istilah penelusuran asli. Dalam hal ini saya rasa itu akan bekerja secara kebetulan.
Walter Heck
0

Untuk seseorang yang membutuhkan penjelasan dan contoh bagaimana menggunakan regxp di Eclipse. Berikut adalah contoh saya yang menggambarkan masalah tersebut.

masukkan deskripsi gambar di sini

Saya ingin mengganti nama

/download.mp4^lecture_id=271

untuk

/271.mp4

Dan bisa ada beberapa di antaranya.

Berikut adalah cara melakukannya.

masukkan deskripsi gambar di sini

Kemudian tekan tombol temukan / ganti

MadNik
sumber