Vim中的多行正则表达式支持

Dan*_*iel 108 regex vim

我注意到跨多行匹配的标准正则表达式语法是使用/ s,如下所示:

This is\nsome text
/This.*text/s
Run Code Online (Sandbox Code Playgroud)

例如,这在Perl中有效,但在Vim中似乎不支持.相反,我必须更加具体:

/This[^\r\n]*[\r\n]*text/
Run Code Online (Sandbox Code Playgroud)

我找不到任何原因,为什么这应该是,所以我想我可能只是错过了vim帮助中的相关位.

任何人都可以通过某种方式确认这种行为吗?

Bri*_*per 165

是的,Perl的//s修饰符不适用于Vim正则表达式.有关:h perl-patterns详细信息以及Vim和Perl正则表达式之间的其他差异列表,请参阅.

相反,你可以使用\_.,这意味着"匹配任何单个字符,包括换行符".它比你的有点短.见:h /\_..

/This\_.*text/
Run Code Online (Sandbox Code Playgroud)

  • http://blog.vinceliu.com/2007/12/regular-expression-matching-more-than.html (3认同)
  • 很好 - 我的生活变得更轻松了.我一直在做(.| \n)* (3认同)
  • `:h /\_ .`中的正斜杠有什么作用?我的意思是,我知道它有效,但为什么`:h /\_.`工作,而不是`:h\_.`? (2认同)
  • @Eddified正斜杠(这是搜索的默认键)指定`\ _ .`的上下文,你可以读取:给我帮助*搜索表达式*`\ _. (2认同)
  • @JIXiang要在foo bar \ n foo baz \ n foo`上进行延迟匹配,请尝试`/ foo \ _。\ {-} foo` (2认同)