Vim 正则表达式 - 如何反转匹配多行的正则表达式?
Vim Regex - How to invert a regex which matches multiple lines?
我的目标是正则表达式匹配除
来自原始正则表达式的多行匹配。
这是我要反转的正则表达式:
\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
非常神奇的指令和
逃脱了一切,但没有运气,得到相同的结果。
我做错了什么?
另外,如果有人能想到另一种方法来完成我正在尝试做的事情会很棒,答案不必遵循我正在尝试的方式。
仔细想想,我想我明白你的意思了...
这条线应该适合你:
\v;\n\n\zs\_.{-}\ze\n\_^select
根据评论更新:
如果你有 leading/ending 个文本块,这个 vimregex 就可以工作:
\v(;\n\n\zs\_.{-}|%^(select)@!\_.{-})\ze(\n\_^select|\n?%$)
我的目标是正则表达式匹配除 来自原始正则表达式的多行匹配。
这是我要反转的正则表达式:
\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
非常神奇的指令和
逃脱了一切,但没有运气,得到相同的结果。
我做错了什么?
另外,如果有人能想到另一种方法来完成我正在尝试做的事情会很棒,答案不必遵循我正在尝试的方式。
仔细想想,我想我明白你的意思了...
这条线应该适合你:
\v;\n\n\zs\_.{-}\ze\n\_^select
根据评论更新:
如果你有 leading/ending 个文本块,这个 vimregex 就可以工作:
\v(;\n\n\zs\_.{-}|%^(select)@!\_.{-})\ze(\n\_^select|\n?%$)