vim匹配错误与正则表达式(?:( [^ f])fe |([lr])f)$

时间:2013-09-05 04:41:08

标签: vim

尝试使用vim脚本构建复数函数

我从php脚本复制了这个正则表达式来制作复数词

/(?:([^f])fe|([lr])f)$/i   \1\2ves

然而,这不适用于vim

if "calf" =~ "\\v(?:([^f])fe|([lr])f)$"
  echo "matched"
end if 

错误输出E64: ? follows nothing

我想我不完全理解这个正则表达式,如何使用vim脚本?

1 个答案:

答案 0 :(得分:2)

Vim的正则表达式方言与更常见的POSIX正则表达式和Perl兼容的正则表达式略有不同。

用于分组而不捕获子匹配的?:在Vim中表示为\%(...\)(或非常神奇的模式中的\v%(...)。因此,您必须使用:

if 'calf' =~ '\v%([^f])fe|([lr])f)$'

(注意我是如何切换到单引号以避免转义反斜杠的。)