Regex 如何在特定字符串常量之后/之前匹配除特定模式之外的所有内容

Regex 如何在特定字符串常量之后/之前匹配除特定模式之外的所有内容,regex,emacs,Regex,Emacs,我试图仅在ATS宏中匹配inline、const、未使用的关键字。 我尝试了ATS([^,]*),但它只匹配inline关键字 编辑: 我需要更改所有ATS参数的颜色。这仅适用于第一个参数 ATS(inline, const, unused) /* Variadic Macro */ OTS(inline, const, unused) 如果所有匹配都是小写,您可以简单地使用: (font-lock-add-keywords nil '(("ATS(\\([^,]*\\)" 1 font-

我试图仅在
ATS
宏中匹配
inline
const
未使用的
关键字。 我尝试了
ATS([^,]*)
,但它只匹配
inline
关键字

编辑: 我需要更改所有
ATS
参数的颜色。这仅适用于第一个参数

ATS(inline, const, unused) /* Variadic Macro */
OTS(inline, const, unused)

如果所有匹配都是小写,您可以简单地使用:

(font-lock-add-keywords nil
  '(("ATS(\\([^,]*\\)" 1 font-lock-builtin-face)))

确保正则表达式区分大小写。

这里有一个简单的方法:

加载库()

然后调用命令/函数
foo

[a-z]+
您也可以使用
字体锁定添加关键字来执行相同的操作

(defun foo ()
  (interactive)
  (hlt-highlight-regexp-to-end "ATS([^)]*\\(inline\\)[^)]*)"
                               'font-lock-builtin-face  nil nil 1)
  (hlt-highlight-regexp-to-end "ATS([^)]*\\(const\\)[^)]*)"
                               'font-lock-constant-face nil nil 1)
  (hlt-highlight-regexp-to-end "ATS([^)]*\\(unused\\)[^)]*)"
                               'font-lock-warning-face  nil nil 1))
如果您知道它们将以相同的顺序出现在相同的
ATS
sexp中,那么您可以将单独的regexp组合成一个,并使用单个调用
hlt highlight regexp以结束
字体锁定添加关键字

您可以使用锚定字体锁定规则。这就像一个搜索中的一个搜索。下面的代码搜索
AST(
。一旦找到它,它就会找到参数列表的末尾,并搜索其中的所有单词

(defun foo ()
  (interactive)
  (hlt-highlight-regexp-to-end "ATS([^)]*\\(inline\\)[^)]*)"
                               'font-lock-builtin-face  nil nil 1)
  (hlt-highlight-regexp-to-end "ATS([^)]*\\(const\\)[^)]*)"
                               'font-lock-constant-face nil nil 1)
  (hlt-highlight-regexp-to-end "ATS([^)]*\\(unused\\)[^)]*)"
                               'font-lock-warning-face  nil nil 1))
(defun foo ()
  (interactive)
  (font-lock-add-keywords nil
                          '(("ATS([^)]*\\(inline\\)[^)]*)" (1 'font-lock-builtin-face t)))
                          'APPEND)
  (font-lock-add-keywords nil
                          '(("ATS([^)]*\\(const\\)[^)]*)"  (1 'font-lock-constant-face t)))
                          'APPEND)
  (font-lock-add-keywords nil
                          '(("ATS([^)]*\\(unused\\)[^)]*)" (1 'font-lock-warning-face t)))
                          'APPEND))
(defun foo()
(互动)
(setq字体锁定多行t)
(字体锁定)添加关键字
无

“(“\\\请具体说明。显示如何使用您所要求的内容。这是用于增量搜索?交互式搜索还是来自Lisp?您想单独匹配每个关键字还是想要关键字列表?您有大量的
ATS(…)
上下文或少数?等等。请指定问题。匹配项是否都是小写?@Drew,我想将ATS中的所有关键字添加为另一种颜色。
(“ATS(\\([^,]*\\)”1字体锁定内置面)
只有关键词,而不是逗号?无论如何,听起来你想在
字体锁定关键词中添加一个或多个模式。
我将删除我猜你在搜索或替换文本等的答案。@Drew,只有关键词。在第一个关键词之后仍然停止:
内联
请发布你正在使用的完整正则表达式。另外,您需要使用结果循环数组。我正在尝试更改ATS宏中关键字的颜色:
(“ATS(\\([^,]*\\)”1字体锁定内置面)
。这只适用于第一个关键字。你应该更新你的问题,并发布ATS宏和你用来替换的完整代码,这样我就可以看出问题的症结所在。我对我的问题进行了评估。谢谢Drew,但是没有办法不在elisp中指定确切的关键字(匹配任何关键字)或者不使用外部elisp库?请稍等,看看您是否没有得到更优雅的答案。您可以随时(我认为可以多次)更改您接受为“the”答案的答案。幸运的话,你会看到多个有趣的答案,提供了不同程度的启示。
字体锁定
版本到目前为止一直有效。再次感谢。但我想如果我想玩参数(例如,如果我忘记之前设置了
unused
标志:
ATS(unused,inline,const,unused)
我应该问问RMS自己!哇\o/,我刚刚创建了
.emacs.d/emacs monster
目录来克隆您所有的elisp存储库..,现在我可以制作模式lol了。