我正在嘗試執行search and replace with regexs。使用Emacs替換正則表達式
假設我有一個foreach(foo1.txt, foo2.txt, foo3.txt, foo4.txt)
。 我想提出「圍繞每個項目列表中的
我從文檔以爲 - - 這正則表達式將工作 (foo[1-4]\.txt) -> "\&"
但它確實不是我做錯了
。?我正在嘗試執行search and replace with regexs。使用Emacs替換正則表達式
假設我有一個foreach(foo1.txt, foo2.txt, foo3.txt, foo4.txt)
。 我想提出「圍繞每個項目列表中的
我從文檔以爲 - - 這正則表達式將工作 (foo[1-4]\.txt) -> "\&"
但它確實不是我做錯了
。?注意括號和圓括號需要轉義( 「多餘的斜線」)在搜索正則表達式,但不在替換正則表達式。
轉義是必需的,因爲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 Course和Steve Yegge's Effective Emacs regex section。
嘗試是這樣的\(foo[1-4]\.txt\)
Emacs的正則表達式總是趕我出去,COS他們沒有的Perl:
\(foo[1-4]\.txt\)
你需要在Emacs的括號中反斜槓。
你已經得到了關於正則表達式的正確答案,但在這種情況下,它可能會更容易使用宏。把點放在第一個名稱的開頭,然後輸入:
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
'。)
有幫助,但有點可怕。 「逃避逃跑」。 MEEP。 – 2009-06-30 15:16:00