Keep Learning

伪程序员记录点滴

VIM正则表达式学习

VIM正则表达式

之前粗略的看了正则表达式的一些内容,但是在VIM中一直用的很少,刚才无意间看到了使用VIM对词进行大小写转换,中间出现了一些正则表达式的内容,从网上找了些内容,觉得可以留下来做个笔记,供以后自己参考。
文章的主要内容参考该博客

量词

VIM中的量词与perl相比

VIM Perl 意义
* * 0个或多个(匹配优先)
+ + 1个或多个(匹配优先)
\?或\= ? 0个或1个(匹配优先),\?不能在 ? 命令(逆向查找)中使用
{n,m} {n,m} n个到m个(匹配优先)
{n,} {n,} 最少n个(匹配优先)
{,m} {,m} 最多m个(匹配优先)
{n} {n} 恰好n个
{-n,m} {n,m}? n个到m个(忽略优先)
{-} *? 0个或多个(忽略优先)
{-1,} +? 1个或多个(忽略优先)
{-,1} ?? 0个或1个(忽略优先)

环视和固化分组

这个内容之前没有接触过,只是简单的摘抄下来,后面再进行研究了。

vim Perl 意义
\@= (?= 顺序环视
\@! (?! 顺序否定环视
\@<= (?<= 逆序环视
\@<! (?<! 逆序否定环视
\@> (?> 固化分组
\%(atom) (?: 非捕获型括号

和perl稍有不同的是,vim中的环视和固化分组的模式的位置与perl不同。例如,查找紧跟在 foo 之后的 bar,perl将模式写在环视的括号内,而vim将模式写在环视的元字符之前。 Perl的写法

1
/(?<=foo)bar/

vim的写法

1
/\(foo\)\@<=bar