【发布时间】:2012-04-22 06:04:32
【问题描述】:
当我注意到我的贪婪多行正则表达式在 Vim 中给出重叠匹配时,我感到很惊讶。正则表达式旨在匹配整个文本块或连续的非空行。
正则表达式显然匹配了我期望的所有内容(突出显示看起来正确),但是当使用n 跳到下一个匹配而不是跳到下一个块时,它转到了当前块的下一行。
这是我使用的正则表达式(相当于大多数正则表达式引擎的 (.+\n){1,}):
\(.\+\n\)\{1,}
这应该至少匹配一个非空行,并且尽可能多的连续非空行,这是一个示例文本文件:
block 1
some stuff
more stuff
block 2
foo bar
baz qux
应用此正则表达式后 (/\(.\+\n\)\{1,}+Enter) 两个块正确突出显示,但我希望正则表达式只有两个匹配项,每个块一个。但是,当我按 n 前进到下一个正则表达式匹配时,似乎每个非空行都与正则表达式匹配,所以我的光标将从第一行开始, n 会把它带到第二行,然后是第三行,然后到块 2 的开头,等等。
如何更改我的正则表达式,以便我看到每个块的预期行为是单个匹配,以便 n 前进到下一个块,而不是下一行?强>
我也有兴趣了解此行为是否在文档中的某处,或者是否有更改此行为的选项。请注意,在搜索/替换中使用相同的正则表达式时,行为是我所期望的(替换只会应用两次,每个块一次)。
【问题讨论】: