在regexp中重用捕获组

时间:2014-03-29 21:28:28

标签: regex emacs elisp

我正在为内部脚本语言编写emacs主要模式。我正在尝试为预处理工具使用的宏设置字体锁定regexp,其格式为$(VNAME)。我想匹配整个宏,以及变量名称的任何后续用法。 (即$(VNAME)VNAME应匹配)。

我已成功将整个预处理器宏与:

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

我试图通过将括号内的字母定义为一个组然后尝试匹配该组来匹配变量名:

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

但是我没有为第1组获得任何匹配。这是允许使用组引用还是我有语法错误?

1 个答案:

答案 0 :(得分:1)

"\\$\(.*\)"是一个6个字符的字符串:\$(.*)。当解释为正则表达式时,它表示“美元,左括号,任何非换行符号序列,右括号”。你想要8个字符的字符串\$\(.*\),它作为正则表达式意味着“美元,开始组,任何非换行字符序列,结束组”。在Elisp语法中,字符串文字中的反斜杠总是引用下一个字符(如果它不是字母数字);与其他一些语言不同,Elisp不知道该字符串是否应该是正则表达式,并且没有特殊的反斜杠加减速。