1

我正在编写一个新的 GtkSourceView 语言规范;遵循教程和其他 Internet 资源中的信息。我定义的语言可以是一个数字:

  1. 一个或多个digit字符
  2. 可选附加(例如在末尾)字母L, l, N, 或n.

例子:

1000
1234L
987654321n

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

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

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

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

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

关于如何匹配这种模式的任何想法?提前致谢!:)

4

1 回答 1

1

您不需要容器上下文;这适用于字符串文字和注释等内容,您可以通过开始和结束模式来识别它,并且它可能包含其他上下文。(例如,字符串文字可能包含转义序列,如\n,您可能希望以不同的方式突出显示,如此屏幕截图所示。)您的“数字”标记可以与单个简单的正则表达式完全匹配,这意味着您需要一个简单的上下文:

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

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

于 2012-10-05T00:24:36.257 回答