regex - 匹配模糊模式,没有前面的单词,但只出现一次
问题描述
从行的开头开始,我有类型@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>
我尝试了各种组合(也涉及到锤子),但我要么无法匹配,要么匹配可能跟随的变量的每个匹配项(比如2,看在 上帝的 份上)。向后看总是会给出一个lookbehind not fixed
或一些这样的错误。我也尝试过prefix/suffix/keyword
,keyword
你在上面看到的模糊匹配在哪里,但这也不起作用。搜索网络显示\K
,这对我没有任何帮助。我知道匹配可能会更好,例如,一个简单的下划线可以作为变量传递,我想我可以做到,但现在我只想看到它正确突出显示。我可能应该提到我不精通PCRE。有解决办法吗?
抱歉,我忘了在 GtkSourceView 中为 gEdit 添加,但我认为这是基于 PCRE 的(?)。
解决方案
我最初将此发布到您的gtksourceview 问题,但也许其他人可能会发现这很有用:
我相信这样的事情会做你想要的:
<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>
\%]
是一个自定义词边界,类似于\b
但可以用 . 重新定义<keyword-char-class>
。
推荐阅读
- python - smtplib 不必要地重复发送
- excel - 是否对 VBA 更改事件进行了修改,其中包括公式驱动的值更改?
- grammar - 函数 'yyparse()' 中对 'yylex' 的未定义引用
- javascript - JS json 在 PHP 上收到一个解密错误
- angular - Angular 订阅只触发一次
- .htaccess - 如何在 Https 上重定向到另一个 Https?
- azure - Azure 应用程序网关运行状况探测错误
- instagram - Instagram Auto-Like JavaScript BOT
- html - 表格列太宽
- java - CSRF 令牌验证失败,如何使用 serenity 放心框架修复?