Saya ingin melakukan pencarian ganti dengan ekspresi reguler di Sublime Text 2. Dokumentasi tentang ini agak anemia. Secara khusus, saya ingin melakukan penggantian pada grup, jadi sesuatu seperti mengonversi teks ini:
Hello my name is bob
Dan istilah pencarian ini:
Menemukan apa: my name is (\w)+
Ubah dengan: my name used to be $(1)
Istilah pencarian berfungsi dengan baik tapi saya tidak tahu cara untuk benar-benar melakukan penggantian menggunakan grup regexp.
sumber
$0
?\0
sama dengan karakter nol, dan\0ddd
digunakan sebagai jalan keluar untuk karakter dengan kode titik ddd). Namun,$0
sepertinya digunakan di Sublime2 sebagai "tanda keluar" menurut halaman ini (meskipun saya mengalami kesulitan menemukan cukup contoh untuk mengetahui dengan tepat bagaimana tanda keluar digunakan dalam Sublime2).$0
digunakan dalam Teks 2/3 Sublime untuk menempatkan kursor keluar dari ekspansi potongan. Lebih banyak tentang cuplikan .$0
adalah seluruh pertandingan regex;$1
adalah grup tangkapan pertama.Omong-omong, dalam pertanyaan di atas:
Untuk:
Temukan bagian:
Dengan mengganti bagian:
Akan kembali:
Ubah bagian cari ke:
Dan ganti akan menjadi apa yang Anda harapkan:
Meskipun (\ w) + akan cocok dengan "bob", itu bukan pengelompokan yang Anda inginkan untuk penggantian.
sumber
Meskipun jawaban sebelumnya benar, ada hal penting yang harus ditekankan! Semua segmen yang cocok dalam string pencarian Anda yang ingin Anda gunakan dalam string pengganti Anda harus ditutup oleh
( )
tanda kurung , jika tidak, segmen yang cocok ini tidak akan dapat diakses oleh variabel yang ditentukan seperti$1
,$2
atau\1
,\2
dll.Misalnya kita ingin mengganti 'em' dengan 'px' tetapi mempertahankan nilai digit:
margin: $1px
ataumargin: \1px
margin: ([0-9]*)em
// dengan tanda kurungmargin: [0-9]*em
CONTOH KASUS YANG BENAR: Menggunakan
margin: ([0-9]*)em
string pencarian (dengan tanda kurung). Lampirkan segmen yang cocok yang diinginkan (misalnya$1
atau\1
) dengan( )
tanda kurung sebagai berikut:margin: ([0-9]*)em
(dengan tanda kurung)margin: $1px
ataumargin: \1px
CONTOH KASUS YANG TIDAK SESUAI: Menggunakan
margin: [0-9]*em
string pencarian (tanpa tanda kurung). Pola regex berikut akan cocok dengan garis yang diinginkan tetapi segmen yang cocok tidak akan tersedia dalam string yang diganti sebagai variabel seperti$1
atau\1
:margin: [0-9]*em
(tanpa tanda kurung)margin: $1px
ataumargin: \1px
sumber
Berikut adalah presentasi visual dari jawaban yang disetujui.
sumber
$_SESSION[(\w+)
? terima kasihPerhatikan bahwa jika Anda menggunakan lebih dari 9 grup tangkap Anda harus menggunakan sintaks
${10}
.$10
atau\10
atau\{10}
akan tidak bekerja.sumber
1
ke grup penangkapan kedua Anda perlu menggunakan kawat gigi seperti${2}1
; $ 21 merujuk pada kelompok tangkapan ke-21, yang tidak ada.Melihat artikel Sublime Text Documentation tidak resmi di Search and Replace , sepertinya
+(.+)
adalah kelompok tangkap yang Anda inginkan ... tapi saya pribadi menggunakan(.*)
dan itu bekerja dengan baik. Untuk MENGGANTI dengan cara yang Anda katakan, Anda mungkin menyukai percakapan ini di forum , khususnya posting ini yang mengatakan untuk hanya menggunakan$1
menggunakan grup yang ditangkap pertama.Dan karena gambar lebih baik daripada kata-kata ...
Sebelum:
Setelah:
sumber