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!


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.


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


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/ .


2

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

replace: ((TypeName)$0)

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.