![使用 vim、man 或 less 时正则表达式中的精确匹配](https://linux22.com/image/29687/%E4%BD%BF%E7%94%A8%20vim%E3%80%81man%20%E6%88%96%20less%20%E6%97%B6%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E4%B8%AD%E7%9A%84%E7%B2%BE%E7%A1%AE%E5%8C%B9%E9%85%8D.png)
当使用 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 中使用 和 单词边界,但这也会匹配其他可能是选项的东西;显式查找空格更安全。