Saya ingin menggunakan fitur temukan dan ganti IntelliJ untuk melakukan transformasi berikut:
// Replace this
model.put('foo', 'bar')
// With this
model['foo'] = bar
Saya sudah mencoba yang berikut ini:
Teks untuk ditemukan: model.put\((.*),(.*)\)
Ganti dengan:model\[\\1\] = \\2
Tapi Intellij tampaknya tidak mengenali \\1
dan \\2
sebagai referensi. Saya juga mencoba satu tebasan, tetapi itu tidak berhasil.
java
regex
intellij-idea
Dónal
sumber
sumber
(foo)
ganti:$1bar
'+ var +'
ke${var}
dalam beberapa string template dan tidak bisa mencari tahu mengapa intellij tidak akan menyelesaikan penggantian. ternyata$
harus lolos dalam penggantian.Singkatnya, Anda harus menggunakan
$1
untuk$n
untuk penggantian backreferences.\1
sintaks hanya untuk referensi-kembali dalam pencarian.Di IntelliJ 2016, dokumentasi dalam aplikasi menyesatkan. Berikut adalah kutipan yang lebih baik dari dokumen lengkap:
Sumber: sintaks ekspresi reguler, Tips & Trik 2016.1
sumber
Bantuan kontekstual dalam-produk untuk regex di Idea 9.0 (dan mungkin versi lain) tampaknya salah. Ini menyatakan ini:
Tetapi ternyata, seperti yang disebutkan dalam jawaban sebelumnya dan pengalaman saya, itu benar-benar \ $ n untuk referensi belakang, bukan \ n
Anda mendapatkan bantuan kontekstual ini dengan mengeklik tautan '[Bantuan]' di sebelah opsi radio "Ekspresi reguler" pada kotak dialog "Ganti Teks"
sumber
IntelliJ IDEA / Referensi / Referensi Sintaks Ekspresi Reguler
Cocok dengan subekspresi dan ingat pertandingan. Jika Anda perlu menggunakan substring yang cocok dalam ekspresi reguler yang sama, Anda dapat mengambilnya menggunakan referensi-kembali (\ num, di mana num = 1..n). Jika Anda perlu merujuk substring yang cocok di suatu tempat di luar ekspresi reguler saat ini (misalnya, dalam ekspresi reguler lain di bidang Penggantian), Anda dapat mengambilnya menggunakan tanda dolar ($ num, di mana num = 1..n). Jika Anda perlu memasukkan karakter tanda kurung ke dalam subekspresi, gunakan "(" atau ")".
sumber