Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Vim正则表达式-如何反转匹配多行的正则表达式?_Regex_Vim_Multiline_Regex Negation_Inverse - Fatal编程技术网

Regex Vim正则表达式-如何反转匹配多行的正则表达式?

Regex Vim正则表达式-如何反转匹配多行的正则表达式?,regex,vim,multiline,regex-negation,inverse,Regex,Vim,Multiline,Regex Negation,Inverse,我的目标是让正则表达式匹配一切,但 多行与原始正则表达式匹配 这是我试图反转的正则表达式: \vselect\{-} 它与下面的示例代码正确匹配。 包含sql语句,而不是大写文本 THIS TEXT IS WHAT I WANT TO MATCH ONCE THE ABOVE REGEX IS CORRECTLY INVERTED. select * from foo where bar; THIS TEXT IS WHAT I WANT TO MATCH ONCE THE ABOVE RE

我的目标是让正则表达式匹配一切,但 多行与原始正则表达式匹配

这是我试图反转的正则表达式:

\vselect\{-}

它与下面的示例代码正确匹配。 包含sql语句,而不是大写文本

THIS TEXT IS WHAT I WANT TO
MATCH ONCE THE ABOVE
REGEX IS CORRECTLY INVERTED.

select *
from foo
where bar;

THIS TEXT IS WHAT I WANT TO
MATCH ONCE THE ABOVE
REGEX IS CORRECTLY INVERTED.

select *
from bar
where foo;

THIS TEXT IS WHAT I WANT TO
MATCH ONCE THE ABOVE
REGEX IS CORRECTLY INVERTED.
遵循vim文档中的操作方法 反转否定一个正则表达式,这就是我想到的:

\v^选择\.{-};@*

这个正则表达式与除第一行之外的所有内容都匹配 从sql语句中。我要电话里的所有线路 要排除的sql语句,而不仅仅是第一行

我还尝试不使用\v very magic指令和 逃脱了一切,但没有运气,得到了同样的结果

我做错了什么?
另外,如果有人能想出另一种方法来完成我正在尝试做的事情,那就太好了,答案不必遵循我正在尝试的方式。

仔细考虑后,我想我明白了你的意思

这一行应该适合您:

\v;\n\n\zs\_.{-}\ze\n\_^select
根据评论更新: 如果您有前导/结尾文本块,则此vimregex有效:

\v(;\n\n\zs\_.{-}|%^(select)@!\_.{-})\ze(\n\_^select|\n?%$)

@WiktorStribiżew,看看示例代码,我的最终目标是使正则表达式匹配除sql语句以外的所有语句。@WiktorStribiżew,我误解了你的意思。我的最终目标是突出重点。这是我正在开发的笔记记录插件所需要的功能。@Kent,很好。sql STMT可能有空行,而非反转的正则表达式仍然可以工作。文本可能有空行和;,但不太可能以;结束;。我不需要删除任何内容。@Kent,文本不能以前导select开头,以;结尾;。此外,文本中永远不会包含sql语句。@WiktorStribiżew,正则表达式不起作用。是的,当不是在非常神奇的模式下时,必须逃脱。肯定是进步了,谢谢。您的正则表达式处理问题中的示例代码。但看起来只有当文本位于sql语句之间时,它才起作用。如果文本出现在sql语句之前和之后,它也应该起作用。也可能有连续的sql语句。为了简单起见,我创建了最初的示例代码,现在我更新了问题中的示例代码。注意,@WiktorStribiżew的第一条注释中的正则表达式也适用于上述情况。怎么翻译成vim regex?@gsavovski我刚刚在回家的路上。现在我根据你的评论更新了我的答案。它应该匹配所有三个街区。太棒了,我记下了你的答案。一段时间以来我一直在想这个问题。我还必须承认,我不明白您的解决方案,我从未使用过\zs和\ze。如果你有机会,请详细解释你的方法。还提到“为什么你要从开始”;那么那些双文件呢\n.我正在开发一个notes插件,它应该在同一个文件中支持多种文件类型。当前我的自定义注释类型为R和sql。这个想法是不需要任何额外的标记,插件就可以识别什么是文本注释,什么是代码,并以不同的方式对待它们。对于示例,您的正则表达式工作得非常好,但是当我在复杂的长文件上尝试它时,我发现它在某些情况下不起作用。一旦我了解了你的解决方案,我就会找出那些案例。再次感谢你的帮助!