【问题标题】:vim match errors out with regular expression (?:([^f])fe|([lr])f)$vim 用正则表达式匹配错误 (?:([^f])fe|([lr])f)$
【发布时间】:2013-09-08 18:57:42
【问题描述】:

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

【问题讨论】:

    标签: vim


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢,我无法从谷歌或帮助中找到 vim 特定的表达方式。链接将有助于了解有关 vim 正则表达式的更多信息。 single quote to avoid backslash 是一个很好的提示。再次感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 2015-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多