为什么在Vim中这个正则表达式不能在SublimeText中工作?

New*_*ria 5 regex sublimetext3

我有这个正则表达式

^\([^\t]*\)\t\([^\t]*\)\t\([^\t]*\)$
Run Code Online (Sandbox Code Playgroud)

这应该匹配

  1. 行的开头
  2. 捕获所有字母直到Tab
  3. 捕获所有字母直到Tab
  4. 捕获所有字母直到Tab
  5. EOL

在Vim中,这很好用: 正确的正则表达式捕获

但在Sublime中它不会匹配.为什么?

Wik*_*żew 5

Vim正则表达式非常具体,与Sublime Text 3使用的PCRE正则表达式引擎表达式语法不同.

在Sublime Text 3中,您可以将您在Vim中使用的模式编写为

^([^\t\r\n]*)\t([^\t\r\n]*)\t([^\t\r\n]*)$
Run Code Online (Sandbox Code Playgroud)

请参阅正则表达式演示

简而言之,(...)应该用来形成一个捕获组,并且你需要添加\r\n以禁止一个否定的字符类来匹配跨行(在Vim中,[^.]*不会与换行符匹配,但它会在Sublime Text 3中).

请注意,(...)(而不是\(...\))也可以在Vim中用作捕获组,但是您需要使用非常神奇的模式来使用该语法.