使用 vim、man 或 less 时正则表达式中的精确匹配

使用 vim、man 或 less 时正则表达式中的精确匹配

当使用 vim、man 或 less 时,我想在 regex 中进行一些精确匹配

例如,当使用 man 时,我想检查参数 '-c'

如果我使用

  /'-c'

匹配可以是 -cim -covert......blabla

但我只想匹配 '-c'

如何做到精确匹配?谢谢!

答案1

更短的 vim 表达式以确保前面或后面没有字符

/\(^\|\s\)\@<=-c\>

男人/更少的等价物:

/(^|\s)-c\b

附加说明(Vim):

Vim 正则表达式中最有用的部分可能就是-c\>“查找 '-c',但前提是后面没有字母”。大多数时候,您可能只需使用 进行搜索即可/-c\>,但为了完整起见,我添加了一个表达式来检查“-c”之前的内容。该表达式是\(^\|\s\)\@<=,它看起来很复杂,只是因为 Vim 的正则表达式语法有点冗长(因为它要求您转义分组括号和“or”管道)。该表达式的\(^\|\s\)意思是“行的开头或空白字符”。当你放在\@<=它后面时,它意味着“不要真正匹配它,只需确保它出现在正则表达式的下一部分之前”(这仅对搜索和替换操作真正有用)。实际上,您可能不需要该\@<=部件。你可以通过省略它并添加 来进一步缩短它\v,这告诉 Vim 你不会逃避花哨的语法。那看起来像/\v(^|\s)-c>

man/less 等价物的解释:

简单多了。 less(默认的手册分页器)使用的正则表达式语法\b与 Vim 的相同\>,并且不需要转义括号或管道字符。它只是查找出现在行开头或紧接在空白字符之后的字符串“-c”,并确保后面没有其他字母。

答案2

正在vim使用

/\(^\|\s\)-c\($\|\s\)

less

/(^|\s)-c($|\s\)

你可以isk在 vim 中使用 和 单词边界,但这也会匹配其他可能是选项的东西;显式查找空格更安全。

相关内容