首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >regex和font-lock中的匹配数未知

regex和font-lock中的匹配数未知
EN

Stack Overflow用户
提问于 2011-05-25 14:34:48
回答 2查看 330关注 0票数 1

我尝试使用font-lock和elisp的regex来突出显示如下内容:

代码语言:javascript
代码运行次数:0
运行
复制
class Foo implements A, B, C, D { }

问题是implements后逗号分隔列表的长度未知。我已经做了regex,它突出显示列表中的所有单词(使用re-buider,A,B,C和D突出显示):

代码语言:javascript
代码运行次数:0
运行
复制
"implements\\s-+\\(?:\\(\\sw+\\)\\s-*,\\s-*\\)*\\(\\sw+\\)"

但是我不能把它和font-lock结合起来。

显然

代码语言:javascript
代码运行次数:0
运行
复制
'("implements\\s-+\\(?:\\(\\sw+\\)\\s-*,\\s-*\\)*\\(\\sw+\\)"
  (1 font-lock-type-face) (2 font-lock-type-face))

不起作用,因为它只突出显示到最后一个实例(C和D),而忽略第一个反向引用后的星号(*)。

有没有一种方法可以捕获所有匹配单词的列表,或者可能有完全不同的方法来解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-30 06:06:22

如果您不希望逗号也被突出显示,那么您的方法将无法工作。当您使用表单的subexp-highlighter

代码语言:javascript
代码运行次数:0
运行
复制
(subexp facespec)

subexp引用您的正则表达式的子组,并使用给定的facespec突出显示。现在,regexp匹配的子组是具有开头和结尾的连续文本范围。实际上,无论何时执行正则表达式搜索,都可以使用函数(match-beginning subexp)(match-end subexp)查询这些值。

但这意味着您不能将数量可变的不含逗号的类名与单个子表达式匹配,因为该子表达式必须是连续跨度的。并且覆盖可变数量类名的连续跨度也必须始终包含逗号,这是没有办法的。

您的方法不是一个好主意的另一个原因是:您的regexp显式使用了空格。如果从高亮显示中排除空格并不重要,但即使在regexp中使用它也不是一个好主意,因为在允许使用空格的任何地方,您都可能遇到注释。

考虑以下代码行:

代码语言:javascript
代码运行次数:0
运行
复制
class Foo implements A, /*B, C,*/ D { }

在这种情况下,您可能希望使用font-lock-comment-face突出显示span /*B, C,*/中的字符,并使用font-lock-type-face突出显示周围的类。如果您仅在所有其他内容都已突出显示之后才突出显示注释,并允许注释覆盖其他字体锁定匹配,则仍可实现此效果。但这将导致相当低效的匹配,因为每个注释都会首先突出显示,就好像它是代码一样,然后在第二次传递中突出显示为注释。

这两个问题的解决方案可能是将关键字("implements")和类的匹配划分为两个不同的匹配规则,也许您可以使用以下内容作为起点:

代码语言:javascript
代码运行次数:0
运行
复制
'(("\\bimplements\\b" . font-lock-keyword-face)
  ("\\b[A-Z]\\w*\\b" . font-lock-type-face))
票数 2
EN

Stack Overflow用户

发布于 2011-05-26 17:20:09

类似这样的东西在这里似乎是有效的:

代码语言:javascript
代码运行次数:0
运行
复制
'("\\(implements\\)\\s-+\\(\\(\\sw+\\s-*,\\s-*\\)*\\sw+\\)"
   (1 font-lock-warning-face)
   (2 font-lock-keyword-face))

(很明显,你可能想要不同的面孔…)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6120450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档