Saya memiliki file HTML besar yang memiliki banyak markup yang terlihat seperti ini:
<p class="MsoNormal" style="margin: 0in 0in 0pt;">
<span style="font-size: small; font-family: Times New Roman;">stuff here</span>
</p>
Saya mencoba melakukan pencarian-dan-ganti Vim untuk menyingkirkan semuanya class=""
dan style=""
tetapi saya mengalami kesulitan membuat pertandingan tidak sesuai.
Upaya pertama saya adalah ini
%s/style=".*?"//g
tapi Vim sepertinya tidak suka ?
. Sayangnya melepas ?
membuat pertandingan terlalu serakah.
Bagaimana saya bisa membuat pertandingan saya tidak sesuai?
regex
vim
regex-greedy
Mark Biek
sumber
sumber
Jawaban:
Alih-alih
.*
digunakan.\{-}
.%s/style=".\{-}"//g
Juga lihat
:help non-greedy
sumber
\v
(bendera sangat ajaib) Anda akan ingin menggunakan.{-}
.{1,3}
halnya (kawat gigi). Tanda minus-
berarti: ulangi sesedikit mungkin (sedikit == minus);)Pencarian tidak serakah di vim dilakukan menggunakan operator {-}. Seperti ini:
coba saja:
sumber
ada apa dengan
sumber
Jika Anda lebih nyaman sintaks PCRE regex, yang
Anda telah [g] vim dikompilasi dengan fitur perl, tes menggunakan
: ver dan periksa fitur; jika + perl ada di sana Anda bisa pergi)
coba cari / ganti menggunakan
Contoh. Tukar atribut src dan alt di tag img:
sumber
perldo
berfungsi dengan baik, tetapi sayangnya tidak menyorot tes yang dipilih saat mengetik regex.Saya telah menemukan bahwa solusi yang baik untuk jenis pertanyaan ini adalah:
(atau perl jika Anda suka). TKI, alih-alih mempelajari keanehan regex vim, gunakan alat yang sudah Anda ketahui. Menggunakan perl akan membuat? pekerjaan modifier untuk tidak mencocokkan pertandingan.
sumber
/pattern
untuk memeriksa apakah Anda mencocokkan pola dengan benar sebelum menerapkannya dan menggunakanc
pengubah dalam vim ekspresi reguler Anda juga bagus :)Dengan
\v
(seperti yang disarankan dalam beberapa komentar)sumber
Plugin eregex.vim menangani operator non-serakah
*?
dan+?
sumber
Hari,
Pemrosesan regexp Vim tidak terlalu brilian. Saya telah menemukan bahwa sintaks regexp untuk sed adalah tentang kecocokan yang tepat untuk kemampuan vim.
Saya biasanya mengatur sorot pencarian pada (: set hlsearch) dan kemudian bermain dengan regexp setelah memasukkan garis miring untuk masuk ke mode pencarian.
Sunting: Mark, trik itu untuk meminimalkan kecocokan serakah juga tercakup dalam buku bagus Dale Dougherty "Sed & Awk" ( tautan Amazon yang disanitasi ).
Bab Tiga "Memahami Sintaks Ekspresi Reguler" adalah intro yang sangat baik untuk kemampuan regexp lebih primitif yang terlibat dengan sed dan awk. Hanya bacaan singkat dan sangat dianjurkan.
HTH
Bersulang,
sumber
\v
sangat membantu membersihkan sintaks.