2017-03-17 28 views
1

我有一堆來自SQL查詢的列名,我想擺脫使用Emacs的AS之前的所有內容。換句話說,我想去從Emacs:替換正則表達式返回0匹配

MAX(CASE WHEN maintenance.work_order IS NULL THEN 1 ELSE 0 END) AS Has_work_order, 

Has_work_order, 

我用re-builder創建一個簡單的正則表達式:"\.\*AS "這凸顯了緩衝的相應部分。但是,當我選擇整個緩衝區並使用M-x query-replace-regexp <RET> "\.\*AS " <RET> "" <RET>運行query-replace-regexp時,Emacs將顯示一條Replaced 0 occurrences消息。

我在做什麼錯?

+0

您可能需要將點放在文件/選區的頂部。 –

+1

您正在轉義'.'和'*',而不是將它們解釋爲正則表達式特殊字符。 – Drew

回答

1

我可以用下面這樣做:

M-x query-replace-regexp <RET> \(.+\)AS <RET> <RET> 

注意光標必須是需要更換的線(S)以上。我以前沒有用過這個,但它是交互式的(每次替換時都按'y',這可能會自動/全局地完成,但我沒有玩過。

+0

幹得好!你可能正在尋找'!'來做所有的替換。 – Ehvince

+0

謝謝!這很好。爲什麼你不用'重新建造者'時必須在這裏使用圓括號? – finbarr

+0

這就是我學到的東西,從來沒有真正看過它。 –

2

通過使用re-builder一個好主意)創建互動使用正則表達式,你再感到困惑不同的正則表達式語法選項之間。re-builder默認爲read語法(這寫elisp的代碼時,你可以使用),而對於交互使用您想要string語法。

請參閱Why do regular expressions created with the regex builder use syntax different from the interactive regular expressions?說明和澄清。

在讀語法,\.\*AS表示正則表達式.*AS(因爲.*讀取字符串時不是特殊,因此這些反斜槓是多餘的);但在字符串語法\.\*AS是正則表達式\.\*AS其中.*字符,這是特別的正則表達式已經越獄,並因此失去其特殊的含義,並在文本反而會匹配文字.*字符。

但是請注意,交互進入正則表達式時,應包括周圍的雙引號字符"存在於re-builder甚至其string語法模式。如果您以交互方式輸入"字符,則正則表達式將與包含那些"字符的文本匹配。