2010-08-18 12 views
17

Ho un buffer di emacs contenente il testoemacs regexp-builder non funziona in replace-regexp

a1b2c3 

utilizzando l'espressione regolare-builder, creo l'espressione regolare

"b\\(2\\)" 

e può vedere l'evidenziazione della partita (b2, con il 2 in un colore diverso).

tuttavia, quando si incolla l'espressione in replace-regexp, ottengo 0 corrispondenze. entrambi con e senza le virgolette. per ottenere un match ho bisogno di usare

b\(2\) 

credo che c'è qualche fuga succedendo qui, ma sicuramente devo essere facendo qualcosa di sbagliato. dover scappare manualmente sembra sconfiggere metà punto.

risposta

27

regexp-builder può mostrare regexp in diverse sintassi. Per impostazione predefinita, utilizza la sintassi appropriata per inserire un'origine di Emacs Lisp (sintassi read), in modo che l'espressione regolare venga posta tra virgolette doppie e ogni barra inversa raddoppia. Per l'uso interattivo, selezionare la sintassi string con C-c C-i (reb-change-syntax).

+0

che è pulito, grazie mille per questo suggerimento – Hartmut

+2

Sono davvero confuso da questa risposta; Considera questo: 'string [5string] ' ora regexp-builder corrisponde al" 5 "(" qualsiasi numero preceduto da una parentesi angolare di apertura ") con" \\ [[0-9] ". Ora se io 'M-x query-replace \\ [[0-9] RET plop 'non ottengo nulla. Ho provato \\ [\ [0-9 \] (funziona anche nel builder), niente. Non hai indicato dove dovrei digitare 'C-c C-i ': nel regexp-builder, nel minibuffer mentre lo usi, altrove? Ho scoperto che era nel regexp-builder, ma poi mi offre 4 scelte (read, rx, sregex, string) che dovrei scegliere ** in modo che emacs capisca la sua sintassi regexp? ** – yPhil

+0

Wow gli escape della sintassi dei commenti i caratteri di fuga, che faranno i commenti sulle figure di fuga a disagio :) Davvero, anche nei marcatori di "codice", in fuga? – yPhil