Saya mencoba menggunakan regex untuk mengganti teks dalam file (ganti url lengkap dengan hanya protokol / domain /):
:%s/\(https\?:\/\/.*?\/\).*/\1/gc
Sayangnya .*?
tidak cocok dengan string, bahkan mencoba untuk melarikan diri dari ?
penjumlahan? Bagaimana seharusnya quantifier yang tidak rakus diloloskan dalam vim?
regular-expression
guido
sumber
sumber
:help greedy
akan membawa Anda ke topik bantuan yang tepat.:help regexp
adalah bantuan yang menggambarkan rasa regex Vim.Jawaban:
Regex Vim memiliki sintaks khusus untuk versi operator yang tidak serakah (agak menjengkelkan, tetapi Anda hanya perlu mengingatnya): http://vimregex.com/#Non-Greedy
Versi non-serakah
*
adalah\{-}
. Jadi, cukup ganti.*
dengan.\{-}
:sumber
Saya lebih suka selalu memecahkan masalah menjadi dua langkah:
Menggunakan sihir "\ v" yang sangat ajaib untuk menghindari banyak garis miring terbalik, merujuk pencarian terakhir di substitusi dan mengubah pembatas substitusi. Semua perubahan ini membuat kode lebih mudah dibaca.
sumber
Anda juga dapat menggunakan
[^\]+/.
untuk mencegah kerakusan.[^/]
berarti "cocok dengan apa pun yang diharapkan/
, dan+
ulangi itu satu atau lebih kali ..Jika saya miliki
/
di regex, saya akan gunakan!
sebagai pemisah sehingga saya tidak perlu melarikan diri/
.Contoh
Misalkan Anda memiliki url berikut:
Menerapkan substitusi, Anda akan mendapatkan itu:
sumber