如何在GtkSourceView语言规范中将数字与可选字母后缀匹配?

时间:2012-10-04 23:30:42

标签: regex gtk pcre gtksourceview

我正在编写一个新的GtkSourceView语言规范;遵循the tutorial和其他互联网资源中的信息。我定义的语言可以采用数字:

  
      
  1. 一个或多个digit个字符
  2.   
  3. 可选择添加(例如在结尾处)字母LlNn
  4.   

示例:

1000
1234L
987654321n

请注意,这只是一些可能的定义之一。

到目前为止,我已经写过(大约(已省略定义的其他部分)):

<context id="number" style-ref="decimal" end-at-line-end="true">
    <start>(\d+)([NnlL]?)</start>
    <end>\D</end>
</context>

我将其解释为:_A number以一个或多个数字字符开头,可选后跟任意一个字符:N n l L ,并在遇到非数字编号时结束(例如空格,字母。)

不幸的是,这并不是很有效,因为附加任何指定的字符(或任何字符)会导致它失败(在这种情况下,这意味着不突出显示。)

有关如何匹配此模式的任何想法?提前致谢! :)

1 个答案:

答案 0 :(得分:1)

您不需要容器上下文;这就是字符串文字和注释之类的东西,你可以通过开始和结束模式识别它,它可能包含其他上下文。 (例如,字符串文字可能包含\n之类的转义序列,您可能希望以不同方式突出显示,如this screenshot中所示。)您的“数字”标记可以完全匹配单个简单的正则表达式,这意味着你想要一个简单的上下文:

<context id="number" style-ref="decimal">
    <match>\b\d+[NnlL]?\b</match>
</context>

免责声明:我从未使用过GtkSourceView,但我使用过其他基于正则表达式的语法高亮显示器,包括EditPad Pro和我自己用Java编写的一个。