2009-06-29 7 views

Répondre

8

Notez que les supports et les parenthèses doivent échapper ("barres obliques") dans une recherche regexp, mais pas dans le remplacer regexp.

Les échappements sont requis car l'analyseur lisp voit la regex avant le moteur regex. Mais, si vous écrivez par programmation (par opposition à une entrée interactive), vous devez échapper aux évasions! ay-yi-yi ....

interactive: 
M-x replace-regexp RET \(obj.method(.*)\{1\}\) RET trim$(\1) 

programmatic: 
(replace-regexp "\\(obj.method(.*)\\{1\\}\\)" "trim$(\\1)") 

les parens évadés sont échappés parce qu'ils se regroupent, les parens unescaped sont parens littérales. Vous voudrez peut-être consulter le Emacs Wiki Regex Crash Course et le Steve Yegge's Effective Emacs regex section.

+2

Utile, mais un peu effrayant. "échapper aux évasions". Meep. –

2

Essayez quelque chose comme ça \(foo[1-4]\.txt\)

2

Emacs regExps me rattraper toujours, cos ils ne sont pas Perl:

\(foo[1-4]\.txt\) 

Vous devez inverser les crochets dans Emacs.

1

Vous avez déjà obtenu la bonne réponse à propos de l'expression rationnelle, mais dans ce cas, il serait probablement plus facile d'utiliser des macros à la place. Placez le point au début du premier nom et le type:

C-x (" M-f M-f " C-f C-f C-x) 

C'est, commencer à enregistrer macro, insérer citation, aller deux mots avant, insérer citation, aller deux personnages en avant pour l'élément suivant, et arrêter l'enregistrement macro

Puis exécutez la macro avec C-x e. Pour répéter, appuyez à nouveau sur e.

(Dans Emacs 23, vous pouvez utiliser F3 au lieu de 'C-x (' et F4 au lieu des deux 'C-x)' et «C-x e.)

Questions connexes