2014-03-29 100 views
0

我正在爲內部腳本語言編寫emacs主模式。我正在嘗試爲預處理工具使用的宏設置字體鎖定正則表達式,格式爲$(VNAME)。我想匹配整個宏,以及變量名的任何後續用法。 (即,應當匹配$(VNAME)VNAME)。重複使用正則表達式中的捕獲組

我已經成功匹配與整個預處理宏:

... 
'("\\$\(.*\)" 
    .font-lock-preprocessor-face) 
... 

我試圖然後也通過定義字母括號作爲一個組內,然後嘗試在小組賽匹配變量名:

... 
'("$\(\\(.*\\)\)\\|\\1" 
    .font-lock-preprocessor-face) 
... 

但我沒有得到組1的任何匹配。這是允許使用組引用還是我有語法錯誤?

回答

1

"\\$\(.*\)"是一個由6個字符構成的字符串:\$(.*)。當解釋爲正則表達式時,它表示「美元,左括號,任何非換行字符序列,右括號」。您需要8個字符的字符串\$\(.*\),作爲正則表達式意思是「美元,起始組,任何非換行字符序列,結束組」。在Elisp語法中,如果字符串文字不是字母數字,則反斜槓通常會引用下一個字符;與其他語言不同,Elisp不知道該字符串是否應該是一個正則表達式,並且沒有特殊的反斜槓。