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了。