在用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
没有什么比赛。如何匹配所有行/新行?
答案 0 :(得分:5)
如果你想使用更常见的(...)
进行分组,你需要包含\v
原子来将Vim的正则表达式语法切换为“非常神奇”;否则,它是\(...\)
。但是对于你的情况,Vim有一个特殊的原子匹配任意字符,包括换行符:\_.
,如下所示:
/DRIVER_ACTIVITY\_.*DriverGroup
无法学习Vim不同的正则表达方言;见:help pattern
。
答案 1 :(得分:2)
The \_s
construct searches spaces including newlines
/DRIVER_ACTIVITY\(\_s\|.\)*DriverGroup
答案 2 :(得分:1)
好的,我看到了问题。在这个样本文件中,第三次尝试匹配,Ingo Karkat和Explosion Pills的建议也是如此。我没有成功的原因是因为所有这些似乎都是贪婪的。这就是为什么在“大文件”中没有一个匹配,因为它贪婪并继续观看,不会在几秒钟内返回匹配,尽管标记位于第一个匹配应出现的同一行。所以它实际匹配,但我的耐心是问题:)
我让它非贪婪而且有效: / DRIVER_ACTIVITY _ { - } DriverGroup