匹配模糊模式,没有前面的单词,但只出现一次

问题描述 投票:0回答:1

我从行的开头开始是@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 for 善良 清酒)。向后看总是会出现lookbehind not fixed或类似错误。我还尝试了prefix/suffix/keyword,其中keyword是您在上面看到的模糊匹配,但是那也不起作用。搜索网上发现\K,这对我没有任何帮助。我知道匹配可能会更好,例如,一个简单的下划线可以作为变量传递,我想我可以做到,但是现在我只想看到它正确地突出显示。我可能应该提到我并不精通PCRE。有没有解决的办法?

[抱歉,我忘了在gEdit的GtkSourceView中添加它,但这是基于PCRE的,我认为是(?)。

regex syntax-highlighting pcre gtksourceview
1个回答
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>重新定义。

© www.soinside.com 2019 - 2024. All rights reserved.