Come sfuggire a regexp caratteri speciali in una stringa?


9

Sto componendo un'espressione regolare complessa e l'utente può fornire una parte dell'espressione. Tuttavia, la parte fornita dall'utente deve essere interpretata letteralmente, ovvero i caratteri speciali regexp devono essere esclusi. Esiste una funzione per sfuggire a questi personaggi? Sembra una cosa comune da fare, ma tutta la mia ricerca su Google non ha avuto successo.

Esempio:

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

Se user-stringè test*case, voglio abbinare test*casema non testttttcase.

Risposte:


12

Puoi usare regexp-quote:

Questa funzione restituisce un'espressione regolare la cui unica corrispondenza esatta è stringa. L'uso di questa espressione regolare nella ricerca avrà successo solo se i caratteri successivi nel buffer sono stringhe; usarlo in una funzione di ricerca avrà esito positivo se il testo da cercare contiene una stringa.

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


1
Grazie mille! Ma perché è stato così difficile da trovare? A volte la documentazione di Emacs mi fa impazzire.
tmalsburg,

2
Puoi descrivere ciò che cercavi e dove ti aspettavi di trovare su questa funzione, con Mx report-emacs-bug. Forse la documentazione è carente e dovrebbe essere riparata.
YoungFrog,

2
@tmalsburg Una parola chiave utile sarebbe "fuga". Forse (defalias 'regexp-escape 'regexp-quote). È stato discusso in una delle mailing list di emacs?
ebpa,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.