【问题标题】:Why won't this regex work in SublimeText when it does in Vim?为什么这个正则表达式在 Vim 中不能在 SublimeText 中工作?
【发布时间】:2019-02-07 10:43:10
【问题描述】:

我有这个正则表达式

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

应该匹配

  1. 行首
  2. 在 Tab 之前捕获所有字母
  3. 在 Tab 之前捕获所有字母
  4. 在 Tab 之前捕获所有字母
  5. EOL

在 Vim 中,这很好用:

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

【问题讨论】:

  • 点赞与观点的有趣比率 - 我想知道这是否是许多人不想搜索的常见问题

标签: regex sublimetext3


【解决方案1】:

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

在 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 才能使用该语法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-04
    • 2014-05-26
    相关资源
    最近更新 更多