0

在用 Vim 打开的文本文件中,我试图匹配两个字符串 DRIVER_ACTIVITY 和 DriverGroup 的出现,中间有任意数量的行:

2013-07-01 05:06:23,801 DRIVER_ACTIVITY
2013-07-01 05:06:23,804 text
2013-07-01 05:06:23,804 more text
2013-07-01 05:06:23,805 DriverGroup

使用:

/DRIVER_ACTIVITY(.*)DriverGroup/s  
/DRIVER_ACTIVITY((.|\n|\r)*)DriverGroup  
/\vDRIVER_ACTIVITY((.|\n|\r)*)DriverGroup  
/DRIVER_ACTIVITY\[\S\s\]*DriverGroup

没有什么匹配的。如何匹配所有行/新行?

4

3 回答 3

5

如果你想使用更常见(...)的进行分组,你需要包含\v原子来将 ​​Vim 的正则表达式语法切换为“非常神奇”;否则,就是\(...\). 但是对于您的情况,Vim 有一个特殊的原子,可以匹配任意字符,包括换行符: \_.,如下所示:

/DRIVER_ACTIVITY\_.*DriverGroup

学习 Vim 不同的正则表达式方言是没有办法的;见:help pattern

于 2013-07-04T13:51:44.213 回答
2

\_s构造搜索包括换行符在内的空格

/DRIVER_ACTIVITY\(\_s\|.\)*DriverGroup
于 2013-07-04T13:52:01.253 回答
1

好的,我看到了问题。在这个示例文件中,第三次尝试匹配,Ingo Karkat 和 Explosion Pills 的建议也是如此。我没有成功的原因是因为所有这些似乎都很贪婪。这就是为什么“大文件”中没有这些匹配项的原因,因为它很贪婪并且继续查找,在几秒钟内没有返回匹配项,尽管标记位于第一个匹配项应该出现的同一行。所以它实际上匹配但我的耐心是问题:)

我让它不贪心并且它起作用了:/DRIVER_ACTIVITY_.{-}DriverGroup

于 2013-07-08T07:33:49.927 回答