0

尝试用 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 脚本一起使用?

4

1 回答 1

2

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

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

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

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

于 2013-09-05T06:36:58.667 回答