當我發現我的貪婪多行正則表達式在Vim中給出重疊匹配時,我很驚訝。正則表達式旨在匹配整個文本塊或連續的非空行。Vim多行正則表達式給出重疊匹配
正則表達式顯然符合我期望的所有內容(突出顯示看起來正確),但是當使用n
跳到下一個匹配而不是跳到下一個塊時,它會跳到當前塊的下一行。
這裏是我用的是正則表達式(相當於(.+\n){1,}
對於大多數正則表達式引擎):
\(.\+\n\)\{1,}
這應該與至少一個非空行,並儘可能多的連續的非空行作爲可能的,這裏是一個例子文本文件:
block 1
some stuff
more stuff
block 2
foo bar
baz qux
施加此正則表達式(/\(.\+\n\)\{1,} + 輸入)的兩個塊被突出顯示COR後直覺,但我希望只有兩個匹配的正則表達式,每個塊一個。但是,當我按n前進到下一個正則表達式匹配時,看起來每個非空行都與正則表達式匹配,所以我的光標將從第一行開始,n將把它帶到第二行,然後是第三行,然後塊2等開始
我怎樣才能改變我的正則表達式讓我看到是每個塊的預期行爲一場比賽,這樣ň前進到下一個塊,而不是下一行?
我也有興趣知道這種行爲是否在文檔的某處,或者如果有一個選項來改變這種行爲。請注意,當在搜索/替換中使用相同的正則表達式時,行爲就是我所期望的(替換將只應用兩次,每個塊一次)。
至於我能看到'\(\%^ \ |^\ n \)\ zs \(。\ + \ n \)*'完成同樣的事情。儘管如此,它仍然令人沮喪。 – 2012-04-10 03:15:18
@NolenRoyalty如果有幾個連續的空行,那麼你會匹配一些空行(零寬度匹配),但它確實使我成爲'\(\%^ \ |^\ n \)\ zs \(。\ + \ n \)\ +',它不具有相同的問題。仍然非常醜陋! – 2012-04-10 16:28:02