如果发生Y在X和Z之间不存在,则Vim Regex匹配发生X

如果发生Y在X和Z之间不存在,则Vim Regex匹配发生X,regex,vim,Regex,Vim,假设我发生了一件事 GET.CUSTOMER: 发生了什么事 GET.ACCOUNT: 如果我只想匹配上面的出现,并且只想不匹配word,那么正则表达式应该如何表达 RETURN 中间 GET.CUSTOMER: BLOCK OF CODE 及 为了使其成为泛型,假设只允许在函数名中使用锚定冒号,因此除了函数名之外,不能在单词上“粘贴”冒号。即 RANDOM.FUNCTION: 是允许的,但是 RANDOM.LINE.OF.CODE : MORE.CODE 不允许

假设我发生了一件事

GET.CUSTOMER: 
发生了什么事

GET.ACCOUNT:
如果我只想匹配上面的出现,并且只想不匹配word,那么正则表达式应该如何表达

RETURN
中间

 GET.CUSTOMER:
        BLOCK OF CODE

为了使其成为泛型,假设只允许在函数名中使用锚定冒号,因此除了函数名之外,不能在单词上“粘贴”冒号。即

RANDOM.FUNCTION:
是允许的,但是

RANDOM.LINE.OF.CODE : MORE.CODE
不允许,除非在引号和撇号内的字符串中

此匹配将在Vim语法文件中使用,而不是在实际代码中使用

@编辑
问题是:上述情况是否可能?我应该研究哪些正则表达式可以帮助我解决这个问题?

以下表达式将匹配
GET.CUSTOMER:
,如果它后面跟
GET.ACCOUNT:
,但两者之间没有
RETURN
。你可能需要稍微调整一下;我在这里留下了我们的关键字边界断言和其他一些错误。此外,由于这是一个多行匹配,如果中间有太多行,则可能会很慢或出现故障

syntax match getCustomerBlockWithoutReturn
\   "\%#=1\%(GET\.CUSTOMER:\_.\{-}\%(RETURN\|GET\.ACCOUNT:\)\)\@>\%(GET\.ACCOUNT:\)\@<="
\   contains=getCustomer
syntax match getCustomer "GET\.CUSTOMER:" contained
hi link getCustomer Statement
语法匹配GetCustomerBlock而不返回

\“\%\\\=1\%(GET\.CUSTOMER:\\.\{-}\%(RETURN\\\.GET\.ACCOUNT:\)\@>\%(GET\.ACCOUNT:\)\@到目前为止,您尝试过什么吗?通过展示您的尝试和描述您遇到困难的部分,我们可以更好地了解您的熟练程度,并给出更准确的答案。目前看来,您只是发布了一个要求,希望有人为您编写代码。此外,请澄清:您希望
get。客户:
突出显示,但只有在它和
GET.ACCOUNT:
之间没有
RETURN
时才突出显示。非常抱歉,我有点忘乎所以,忘了包括实际的问题,即:上面的问题可能吗?您第二条评论的答案是肯定的。我想GET.CUSTOMER:只有在没有返回时才突出显示在它和GET.ACCOUNT之间:我尝试使用正向查找,但我昨天才开始使用正则表达式来编写我自己的语法高亮程序-因此问题是的,这是可能的,但您并不是在寻找单个正则表达式。您正在寻找语法选项来解析文件。查看
:help usr_44.txt
syntax match getCustomerBlockWithoutReturn
\   "\%#=1\%(GET\.CUSTOMER:\_.\{-}\%(RETURN\|GET\.ACCOUNT:\)\)\@>\%(GET\.ACCOUNT:\)\@<="
\   contains=getCustomer
syntax match getCustomer "GET\.CUSTOMER:" contained
hi link getCustomer Statement