如何在Vim中使用正则表达式搜索遵循多行模式的字符串?

时间:2018-06-20 07:09:51

标签: regex vim

我有一个文本文档,该文本文档以多行模式存在一些字符串:

fdcxxxxxxxxxxxxxxxxxxx
fdcxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxx
xxxxxxxVOLxxxxxxxxxxxx

“ x”代表空格,数字,字母和其他符号。而且我只想将第二个fdcVOL匹配。

我尝试使用正则表达式,例如"fdc\_.*VOL",它将与VOL匹配的第一个fdc。但是如果使用"fdc\_.*?VOL",我什么也收不到。

1 个答案:

答案 0 :(得分:3)

您可以使用

/fdc\(\(fdc\)\@!\_.\)\{-}VOL

或者,如果您更希望在正则表达式中转义,请使用“非常魔术模式”:

/\vfdc((fdc)@!\_.){-}VOL

详细信息

  • fdc-匹配fdc
  • \(-开始一个小组:
    • \(fdc\)\@!-检查当前位置右边是否没有fdc(在通用正则表达式中也称为“负超前”)
    • \_.-任意1个字符
  • \)\{-}-结束组并使其匹配0次或更多次,但要尽可能少({\{-}就像普通正则表达式中的*?一样)
  • VOL-一个VOL子字符串。

查看屏幕截图:

enter image description here