2010-08-16 45 views
25

我注意到,當前的自動模式ALIST項全部結束用單引號,例如設置自動模式ALIST在Emacs

("\\.java\\'" . java-mode) 

什麼是單引號的目的。我本來期望看到

("\\.java$" . java-mode) 

我想問的原因是,我試圖讓與名稱匹配的正則表達式

^twiki\.corp.* 

開在組織模式的文件。我曾嘗試沒有成功如下:

以下工作:

(add-to-list 'auto-mode-alist '("twiki\\.corp" . org-mode)) 

,但不是我想要什麼比較,因爲嵌入在他們twiki.corp文件名會在組織模式中打開。

回答

27

\\」空字符串在字符串/緩衝的結尾匹配:

http://www.gnu.org/software/emacs/manual/html_node/emacs/Regexp-Backslash.html EL

$將匹配行的末尾:如果你在你的文件名換行(很少見) $將匹配換行符而不是字符串的結尾。

的正則表達式是對整個匹配,所以你需要包括「/」相匹配的目錄分隔符:

(add-to-list 'auto-mode-alist '("/twiki\\.corp" . org-mode)) 
+0

THX!在這種情況下匹配字符串末尾的空字符串的目的是什麼?是否確保「.java」之後沒有空格?它如何比使用$更好? – chris 2010-08-16 15:56:40

+3

這是爲了確保你在'.java'之後什麼也沒有。否則,像'somefile.java.not.really'這樣的東西也會匹配。如果你的文件名中有一個換行符,但這是不常見的,但可能的話,它比'$'要好。例如,像'bob.java \ nsomething else'這樣的文件名可能是一些惡意攻擊的載體(儘管我不知道攻擊會是什麼)。 – 2010-08-17 13:59:14

+5

我會使用可愛的'rx'形式,這樣可以避免您必須記住糟糕的正則表達式語法。 (你必須記住rx自己的語法,但它更具可讀性。) '(rx「/twiki.corp」eos)' – offby1 2010-08-17 16:28:37