question que le titre.Comment remplacer « (» avec « (» dans l'expression rationnelle, Emacs/saveur elisp?
Plus précisément, je suis un peu fatigué d'avoir à taper \(
, etc. chaque fois que je veulent une parenthèse dans les fonctions (interactive) regexp d'Emacs (sans parler de la \\(
dans le code). donc, je l'ai écrit quelque chose comme
(defadvice query-replace-regexp (before my-query-replace-regexp activate)
(ad-set-arg 0 (replace-regexp-in-string "(" "\\\\(" (ad-get-arg 0)))
(ad-set-arg 0 (replace-regexp-in-string ")" "\\\\)" (ad-get-arg 0)))))
dans l'espoir que je peux facilement oublier idiosyncrasie emacs dans regexp pendant « mode d'interaction ». Sauf que je ne peux pas obtenir l'expression rationnelle droite ...
(replace-regexp-in-string "(" "\\\\(" "(abc")
donne \\(abc
au lieu du \(abc
recherché. D'autres variations sur le nombre de barres obliques donnent juste des erreurs. Pensées? Depuis que j'ai commencé à poser des questions, je pourrais en demander une autre: puisque le code Lisp n'est pas censé utiliser les fonctions interactives, le fait de recommander query-replace-regexp
devrait être correct, ai-je raison?
On ne sait pas ce que vous essayez de faire. Un littéral '(' correspond à lui-même. '\\ (' démarre une capture lorsque vous n'êtes pas dans une chaîne entre guillemets. \\\ ('démarre une capture lorsque vous êtes dans une chaîne entre guillemets doubles. confus, juste différent de, disons, perl qui analyse les expressions rationnelles différemment des chaînes entre guillemets doubles.Utilisez 'rx' si cela vous dérange vraiment De plus, le code Lisp peut appeler des fonctions interactives. – jrockway
@jrockway: J'utilise beaucoup plus l'expression groupée que d'essayer de faire correspondre de vraies parenthèses, et devoir taper \\ (quelque chose \\) tout le temps est fatiguant. Je sais que cela nécessite de citer la parenthèse - mais pas étonnamment donné la quantité de parenthèses en Lisp – polyglot