【问题标题】:Vim regex with metacharacters inside bracket括号内带有元字符的 Vim 正则表达式
【发布时间】:2014-01-12 03:51:27
【问题描述】:

如何在 vim 正则表达式中搜索元字符或其他字符?

示例:(我希望它匹配元字符 '\w' 或字符 '-' 1 次或多次

[-\w]\+

但是那个正则表达式并不像我希望的那样工作。它只匹配 -、w 和 .我试图逃避 '\' 但这不起作用。

我查看了 vim 文档,但没有这样的例子。

【问题讨论】:

  • 另外,我知道我可以做类似 [-a-zA-Z]\+ 的事情。我不是在寻找那个解决方案。我对括号内的元字符感兴趣。
  • +1 提出了一个我经常思考的问题!

标签: regex vim


【解决方案1】:

在集合中,您必须使用特殊字符类。下面的表达式等价于你的:

[-_[:alnum:]]\+

查看:h [:alnum:](和后续行)以获取支持类的完整列表。

【讨论】:

  • 如果您正在处理 ASCII,是的,[-_A-Za-z] 更简单。
  • 您给出的模式等同于问题中提出的模式。等效为[-_[:alnum:]]\+(请参阅:h \w:h alpha)。
  • 对不起@ib,感谢您指出。事实上,我在提到帮助时写了正确的类,但放错了前者。
【解决方案2】:
\%(\w\|-\)*

使用\%( 组,因此不会捕获任何内容。 \|\w- 之间交替使用

或者非常神奇,\v

\v%(\w|-)*

【讨论】:

  • 这很有帮助,但是括号内没有元字符。
  • 两者是等价的。例如\%(a\|b\|c\)\+[abc]\+ 相同。现在,如果您说您需要使用[^...],那将完全是另外一回事。我的想法是使用任何等效的东西,并节省您的打字和/或脑力。
【解决方案3】:

有一个名为 eregex.vim 的插件,它可以将 PCRE 转换为 Vim 的语法,将 [\w] 扩展为 [0-9A-Za-z_],以及它所做的许多其他事情。需要over a thousand lines of vim to achieve that translation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    • 1970-01-01
    • 2014-02-04
    相关资源
    最近更新 更多