2013-04-25 105 views
1

在Emacs的正則​​表達式,我在做替換,正則表達式,搜索出該如何在Emacs Regexp中替換多個匹配的字符串?

<span class="small">\([^<]+\)</span>\([^<]+\)<span class="small">\([^<]+\)</span>

,並試圖用這種

<span class="small">\1\2</span>

我試圖以連接來取代它兩個匹配的字符串我究竟做錯了什麼?

+2

我看到你有一堆的正則表達式的問題。我強烈推薦使用'M-x re-builder'(又名'regexp-builder'),它可以讓你交互地構建一個regexp,同時動態地顯示你(在你調用的緩衝區中)模式和每個子組匹配的內容。有關文檔,請參閱'M-x find-library RET重新構建器RET'中的註釋,以及使用重構器緩衝區中的'C-h m'來查看可用的鍵綁定。你*需要確保你理解不同的語法 - 特別是「讀」與「字符串」 - 否則反斜槓可能會導致混淆。 – phils 2013-04-25 20:52:01

+0

@phils謝謝,你是對的,正則表達式生成器真的很有幫助。 – incandescentman 2013-04-26 05:26:10

回答

2

沒有描述它如何不適合你,我只能猜測你打算用\1\3而不是\1\2來代替。

第二種可能性是您正在操作的文本與您的正則表達式實際上不匹配。

(switch-to-buffer (get-buffer-create "nst.html")) 
(insert "<span class=\"small\">foo</span>bar<span class=\"small\">baz</span>") 
(goto-char (point-min)) 
(replace-regexp 
    "<span class=\"small\">\\([^<]+\\)</span>\\([^<]+\\)<span class=\"small\">\\([^<]+\\)</span>" 
"<span class=\"small\">\\1\\3</span>") 

在緩衝區中嘗試M-x undo以查看替換操作之前的樣子。

(我想失去文本\2是你的意圖?)

+1

此外,由於它們不使用\ 2,第二個匹配器部分不需要圍繞它的\(和\)。然後\ 1 \ 2將工作。 – 2013-04-26 05:14:30

相關問題