Vim和正则表达式:Vim使用什么类型的正则表达式?

20

我已经使用了6个月优秀的Vim文本编辑器。

最有趣的是Vim内置了出色的正则表达式支持。

为了在这里少提问,我想更好地理解正则表达式 :)

我尝试了Regex coach、Espresso和其他正则表达式辅助应用程序,但我发现即使它们在这些应用程序中起作用,也经常无法在VIM中正常工作。

Vim使用什么样的正则表达式?是否有任何辅助应用程序可以为Vim构建正则表达式命令?


1
对于现在偶然发现这篇文章的任何人:如果你使用 +perl 编译了 Vim,你可以通过 :perldo s/search/replace/g 命令来使用 Perl 语法进行搜索和替换。 - reem
3个回答

10
据我所知,vim 使用它自己的语法风格。以下是手册上的说明:

Vim的正则表达式在功能上最类似于Perl。它们之间的区别主要在于表示法。

如果您想要更好(更严谨)的解释,请参阅《精通正则表达式》中的“传统NFA”。

2
很抱歉,但ViM的正则表达式只是模糊地类似于Perl的。例如,在Perl中,要匹配加号使用/+,在ViM中使用/ +。在Perl中,所有非字母数字都用反斜杠转义。在ViM中,它们混合使用。 - shawnhcorey
3
vim的正则表达式语法有些混乱。 我真的、真的很希望有一种方法可以将其转换为egrep的语法,更好的是perl的语法。在nvi中,您可以使用":set extended"来获得egrep样式,这样就不必反斜杠括号、加号等。 - tchrist
2
Vim的正则表达式语法不仅有些混乱(即,反斜杠不一致),而且它有几种不同的模式。请参见:h magic以获取有关Vim可以处理反斜杠的不同方式的信息。 - Herbert Sitz
Vim 在保持一些传统 Vi 语法的一致性方面受到了一些阻碍,因此如果从 Perl 的角度来看,有些事情可能会有点令人困惑。正如 Sitz 所说,可以查看 :h magic - ewh
1
这个脚本可以帮助你测试Vim的正则表达式,并且也可以帮助理解它。 - Raimondi

7

Vim有几种正则表达式模式,其中之一是very magic,它非常类似于传统的正则表达式。只需在前面放置\v,您就不必转义太多字符。


1
一个例子会很好。 - Shayan
我无法进行编辑,因为有太多待处理的编辑,但是这里有一个基本的示例::%s/\v.+([a-z]+)/\1/g。这将会将一行中直到第一个字母序列之前的任何内容替换为仅包含字母的内容。 - undefined

2
有一个名为eregex.vim的插件,它可以将PCRE(Perl兼容的正则表达式)转换为Vim的正则表达式语法。
这将使来自其他环境的正则表达式更有可能工作,因为PCRE已成为事实上的行业标准:例如Java的java.util.regex、Python的re模块以及在Ruby和JavaScript中发现的正则表达式都是PCRE(每个都有轻微的差异)。

1
我更喜欢使用“类Perl”这个术语,而不是“PCRE”。通常,“PCRE”指的是一个库(被PHP、具有特定USE标志和rematchpcre选项或[[ … -pcre-match … ]]、具有特定USE标志和--perl-regexp/-P选项的zsh,以及grep)。Python 和 JavaScript 没有使用它,很可能 Java 也没有。我敢打赌,在支持的转义序列(例如 \p{}\x{}\cx\X\N 等)方面,你会看到主要差异。此外,\Q…\E 也不常见。这些被 PCRE 和 Perl 支持,但 Python 或 JavaScript 并不支持(除了 \x{}\cx)。 - ZyX
eregex正是我一直在寻找的。基本上,它提供了使用类似于Perl的正则表达式而不是Vim自身风格的机会。 - Eldamir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接