2009-06-29 111 views

回答

8

注意括號和圓括號需要轉義( 「多餘的斜線」)在搜索正則表達式,但不在替換正則表達式。

轉義是必需的,因爲lisp解析器在正則表達式引擎之前看到正則表達式。但是,如果你以編程方式編寫(而不是交互式輸入),你需要逃避逃跑! AY-奕奕....

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

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

逃脫的括號被轉義,因爲它們分組,轉義括號是字面上的括號。

您可能想查看Emacs Wiki Regex Crash CourseSteve Yegge's Effective Emacs regex section

+2

有幫助,但有點可怕。 「逃避逃跑」。 MEEP。 – 2009-06-30 15:16:00

2

嘗試是這樣的\(foo[1-4]\.txt\)

2

Emacs的正則​​表達式總是趕我出去,COS他們沒有的Perl:

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

你需要在Emacs的括號中反斜槓。

1

你已經得到了關於正則表達式的正確答案,但在這種情況下,它可能會更容易使用宏。把點放在第一個名稱的開頭,然後輸入:

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

也就是說,開始錄製宏,插入報價,前鋒去兩個字,插入引用,轉發去的兩個字符的下一個元素,並停止錄製宏。

然後用C-x e運行宏。重複一遍,再次點擊e

(在Emacs的23,你可以用F3代替 'C-x (',和F4,而不是兩個 'C-x)' 和 'C-x e'。)