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

时间:2016-05-20 15:24:22

标签: 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
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^(select\_.{-};)@!.*

这个正则表达式匹配除了第一行之外的所有内容 来自sql语句。我想要的所有线路 要排除的sql语句,而不仅仅是第一行。

我也尝试过不使用\v魔法指令 逃过一切,但没有运气,得到了同样的结果。

我做错了什么?
此外,如果任何人都能想到另一种方式来实现我想要做的事情会很棒,那么答案就不必遵循我尝试的方式。

1 个答案:

答案 0 :(得分:2)

经过深思熟虑后,我想我得到了你的意思......

这一行应该适合你:

\v;\n\n\zs\_.{-}\ze\n\_^select

根据评论更新:

如果你有前导/结束TEXT块,这个vimregex可以工作:

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