vim nomor pencarian yang mengandung jumlah digit tertentu

23

Saya perlu menemukan nomor panjang tertentu dalam dokumen besar. Saya mencoba menggunakan regex untuk ini. Sebagai contoh, Jika saya perlu mencari angka dengan tepat 2 digit, saya menggunakan \d\d(yaitu / d dua kali diikuti oleh spasi). Ini bekerja dengan baik.

Tetapi untuk menemukan 10 angka angka itu tidak benar-benar layak untuk mengetik \d10 kali.

Sudah dicoba \d{2}, kata ' E486: Pola tidak ditemukan: \ d {2} '

Apakah ada cara yang lebih cepat / mudah untuk mencapai ini?

mtk
sumber

Jawaban:

32

Ada berbagai dialek ekspresi reguler; beberapa (misalnya Perl) tidak memerlukan garis miring terbalik pada pengubah kuantifikasi ( \d{2}), beberapa (misalnya sed) memerlukan dua ( \d\{2\}), dan dalam Vim, hanya keriting pembuka yang membutuhkannya ( \d\{2}). Itulah keadaan menyedihkan dari dialek ekspresi reguler yang tidak kompatibel.

Perhatikan juga bahwa untuk mencocokkan angka yang tepat , Anda harus memasang jangkar pertandingan agar \d\{2}tidak cocok dengan angka ( 12) di 123. Ini dapat dilakukan dengan pandangan negatif ke belakang dan pandangan ke depan :

\d\@<!\d\{2}\d\@!
Ingo Karkat
sumber
Sempurna. Bisakah Anda tolong satu info liner di regex? Akan sangat membantu. Terima kasih
mtk
1
Untuk seseorang yang berjuang dengan sintaksis regexp dasar, melihat-belakang / ke depan cukup maju. Saya mungkin tidak bisa menggambarkannya lebih baik daripada built-in :help /\@<!dan :help /\@!. Jangan khawatir jika Anda tidak segera memahami segalanya; seperti yang saya katakan, ini cukup maju.
Ingo Karkat
Anda juga dapat meletakkan \vdi awal regex jika Anda ingin menghindari keharusan melarikan diri {, lihat :help magicuntuk informasi lebih lanjut (itu membuat vim regex berperilaku sedikit lebih seperti perl regex, meskipun masih ada perbedaan).
evilsoup
Terima kasih banyak: \d\{4}di Vi itu sepele sekali
installero
9

Coba yang berikut ini:

\d\{2}

dan Anda sebaiknya \tidak menggunakannya/

Anda dapat mengetahui lebih lanjut tentang penekanan vim reguler di situs ini atau vimbersama :help regular.

Raphael Ahrens
sumber
2

Bekerja dengan kurung: \d\{2\}

one_half_3544
sumber
1

Tidak secantik itu, tetapi ini berhasil bagi saya selama 5 digit dalam file log.

/\<\%(\d\d\d\d\d\)\>
theINtoy
sumber
-1

Untuk seseorang seperti saya mencapai halaman ini hanya untuk mencari pola yang cocok dengan angka berapa pun :

\d\+

(Butuh beberapa waktu untuk mencari tahu pelarian ekstra wajib \ sebelum +)

Kevin Liu
sumber
+quantifier adalah singkatan dari 1 kejadian atau lebih. Ekspresi reguler ini cocok dengan 1 atau lebih kemunculan digit.
gaganso