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

时间:2018-09-01 19:59:41

标签: regex sublimetext3

我有这个正则表达式

^\([^\t]*\)\t\([^\t]*\)\t\([^\t]*\)$

应该匹配的

  1. 该行的开头
  2. 捕获所有字母直到制表符
  3. 捕获所有字母直到制表符
  4. 捕获所有字母直到制表符
  5. EOL

在Vim中,可以正常工作: correct regex capture

但是在Sublime中它将不匹配。为什么?

1 个答案:

答案 0 :(得分:5)

Vim regex为rather specific,与Sublime Text 3使用的PCRE regex引擎表达式语法不同。

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

^([^\t\r\n]*)\t([^\t\r\n]*)\t([^\t\r\n]*)$

请参见regex demo

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

请注意,(...)(而非\(...\))也可以用作Vim中的捕获组,但是您需要使用very magic mode来使用该语法。