我想找到一种方法来显示所有包含特定模式的行,但它的相邻(上一行、下一行)却不显示。
例如:假设模式是单词“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