
我想找到一種方法來顯示包含特定模式的所有行,但它的相鄰(上一個、下一個)行卻沒有。
例如:假設模式是單字“PATTERN”
1.##########################
2.#########圖案#########
3.#################################
然後第二行有效並顯示。
但
1.##########################
2.#########圖案#########
3.#########圖案#########
4.#################################
那麼第二行和第三行無效,因此不會顯示
答案1
您需要使用正規表示式捕獲組,如下所示:
/\v%(PATTERN.*\n.*)@<!(PATTERN)%(.*\n.*\1)@!
這可能看起來很可怕,但實際上非常簡單:
\v
用於啟用“非常神奇”正規表示式(避免對大多數特殊字元使用反斜線)PATTERN.*\n.*
是PATTERN
,後面跟著任何內容、換行符,然後再跟任何內容(...)@<!
是消極後視的模式:這意味著我們不想要大括號之間存在什麼。所以在我們的例子中,所有步驟都不2
應該存在(PATTERN)
這是我們真實的話語,這個應該存在!我們用大括號捕獲它以供將來使用.*\n.*\1
是任何東西,換行符,還是任何東西,以及我們捕獲的組(參見步驟4
)%(...)@!
是一個消極的前瞻,和以前一樣,我們不希望大括號之間的內容存在。
基本上,我們想要PATTERN
,即:
- 前面沒有包含以下內容的行
PATTERN
- 後面沒有包含以下內容的行
PATTERN