【问题标题】:Vim and Regular Expression: what kind of regex does Vim use?Vim 和正则表达式:Vim 使用什么样的正则表达式?
【发布时间】:2011-04-24 10:36:14
【问题描述】:

自从 6 个月以来,我一直在使用出色的 Vim 文本编辑器。 最有趣的是 Vim 出色的内置正则表达式支持。

我想更好地理解正则表达式,以便在这里少问问题:)

我尝试了 Regex coach、Espresso 和其他 regex-help 应用程序,但我发现即使他们在这些应用程序中工作,它通常在 VIM 中也不起作用。 Vim 使用什么样的正则表达式? 是否有任何帮助应用程序可以让我为 Vim 构建正则表达式命令?

【问题讨论】:

  • 对于现在遇到这个问题的任何人:如果您使用 +perl 编译 vim,您可以随时使用 :perldo s/search/replace/g 并使用 perl 语法。

标签: regex testing vim


【解决方案1】:

据我所知vimuses it's own flavor。这是the manual 所说的:

Vim 的正则表达式最类似于 Perl 的,就你能做什么而言。 它们之间的区别主要是 只是符号;

如果您想要更好(更严肃)的解释,请在 Mastering Regular Expressions 中查找“Traditional NFA”。

【讨论】:

  • 我很抱歉,但 ViM 的正则表达式只是模糊地类似于 Perl 的。例如,在 Perl 中,要匹配加号使用 /\+/ 在 ViM 中使用 /+/ 在 Perl 中,所有非字母数字都用反斜杠转义。在 ViM 中,它们是混合的。
  • vim 有一个混合的正则表达式语法。我真的,真的想要一种将它变成 egrep 或更好的 perl 的方法。在 nvi 中,您可以使用 :set extended 获得 egrep 样式,这样您就不必反击括号和加号等。
  • Vim 的正则表达式语法不仅有点混乱(即反斜杠不一致),而且它有几种不同的模式。有关 Vim 处理反斜杠的不同方式的信息,请参阅 :h magic
  • Vim 由于与传统的 Vi 语法保持一定的一致性而受到了一些阻碍,所以如果从 Perl 的角度来看,事情可能会有点混乱。正如 Sitz 所说,看看:h magic
  • This script 可以帮助你测试 Vim 的正则表达式,它也可以帮助你理解它。
【解决方案2】:

Vim 有几种正则表达式模式,其中之一是very magic,它与传统的正则表达式非常相似。只需将\v 放在前面,您就不必逃避太多。

【讨论】:

  • 举个例子就好了
【解决方案3】:

有一个名为 eregex.vim 的插件,它可以将 PCRE(Perl 兼容的正则表达式)转换为 Vim 的正则表达式语法。

这将使来自其他环境的正则表达式更有可能工作,因为 PCRE 已成为事实上的行业标准:例如Java 的 java.util.regex、Python 的 re 模块以及 Ruby 和 JavaScript 中的正则表达式都是 PCRE(每个都有细微差别)。

【讨论】:

  • 我宁愿使用术语“Perl-like”而不是“PCRE”。 PCRE 通常表示一个库(由 PHP 使用,zsh 带有特定的 USE 标志和rematchpcre 选项或[[ … -pcre-match … ]],grep 带有特定的 USE 标志和--perl-regexp/-P 选项)。 Python 和 JavaScript 不使用它,Java 很可能也不使用它。我敢打赌,您会看到支持的转义序列的主要差异(例如\p{}\x{}\cx\X\N 和许多其他),\Q…\E 也不常见。 PCRE 和 Perl 支持这些,但 python 或 javascript 不支持(\x{}\cx 除外)。
  • eregex 正是我想要的。基本上增加了使用类似 perl 的正则表达式而不是 Vim 自己的风格的机会
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-21
  • 1970-01-01
  • 1970-01-01
  • 2017-01-15
  • 2023-03-09
相关资源
最近更新 更多