Bagaimana cara melepaskan karakter khusus regexp dalam sebuah string?

9

Saya menyusun ekspresi reguler yang kompleks dan pengguna dapat menyediakan bagian dari ekspresi. Namun, bagian yang disediakan pengguna harus ditafsirkan secara harfiah, yaitu karakter khusus regexp harus diloloskan. Apakah ada fungsi untuk keluar dari karakter ini? Sepertinya hal yang biasa dilakukan tetapi semua googling saya tidak berhasil.

Contoh:

(re-search-forward (format "\b%s\b" user-string))

Jika user-stringadalah test*case, saya ingin mencocokkan test*casetapi tidak testttttcase.

tmalsburg
sumber

Jawaban:

12

Anda bisa menggunakan regexp-quote:

Fungsi ini mengembalikan ekspresi reguler yang hanya kecocokan persisnya adalah string. Menggunakan ekspresi reguler ini dalam melihat-akan hanya akan berhasil jika karakter berikutnya dalam buffer adalah string; menggunakannya dalam fungsi pencarian akan berhasil jika teks yang dicari berisi string.

(regexp-quote "^The cat$") => \\^The cat\\$

Dan
sumber
1
Terima kasih banyak! Tetapi mengapa ini sangat sulit ditemukan? Terkadang dokumentasi Emacs membuatku gila.
tmalsburg
2
Anda dapat menggambarkan apa yang Anda cari, dan di mana Anda diharapkan menemukan tentang fungsi ini, dengan Mx report-emacs-bug. Mungkin dokumentasinya kurang dan harus diperbaiki.
YoungFrog
2
@tmalsburg Kata kunci yang berguna adalah "melarikan diri". Mungkin (defalias 'regexp-escape 'regexp-quote). Apakah ini dibahas di salah satu milis emacs?
ebpa