从行首开始,我有@variable a 2
类型的行。关键字及其标识符@variable
是已知的并且是固定的。变量也可以具有[_a-zA-Z]
作为第一个字符,然后也可以具有第二个字符编号,或者也可以是组合。它们与variable
之间至少有一个空格,与值之间也至少有一个空格,它们也可以是表达式,例如(1+2)/2
或其他变量b
,因此它以数字,字母或括号开头。此行之后的内容可能是很多不重要的事情(其中还包括换行符)。
我想做的就是匹配变量,但前提是它是variable
之后的第一件事,后跟一个值或表达式。这是我上次尝试后的情况:
<context id="variable-noequal" style-ref="variable">
<match extended="true">
(((variable|variabel)\b\s+)?)
(([_a-zA-Z][_a-zA-Z0-9]*))
(?=((\s+)|(\s*\n)))
</match>
</context>
我尝试了各种组合(也涉及到锤子),但是我要么没有匹配项,要么匹配可能跟随的变量的每个匹配项(例如 a 2 善意 缘故)。向后看总是会出现lookbehind not fixed
或某些此类错误。我还尝试了prefix/suffix/keyword
,其中keyword
是您在上面看到的模糊匹配,但是那也不起作用。搜索网上发现\K
,这对我没有任何帮助。我知道匹配可能会更好,例如,一个简单的下划线可以作为变量传递,我想我可以做到,但是现在我只想看到它正确地突出显示。我可能应该提到我并不精通PCRE。有解决办法吗?
对不起,我忘了在gEdit的GtkSourceView中添加它,但这是基于PCRE的,我想(?)。
答案 0 :(得分:0)
我最初将其发布到您的gtksourceview issue,但也许其他人可能会发现这很有用:
我相信这样的事情会做你想要的:
<context id="variable-declaration">
<start>@variable\%]</start>
<end>(?=\S)</end>
<include>
<context id="variable-name" style-ref="variable" once-only="true">
<match>[_a-zA-Z][_a-zA-Z0-9]*</match>
</context>
</include>
</context>
\%]
是custom word boundary,类似于\b
,但可以用<keyword-char-class>
重新定义。