Skip to main content

vim中断零宽断言-正则环视

vim与perl的零宽断言表达式相比,(?换成了\@,并且这个符号应该跟在匹配模式的后边。

\@= (?= 顺序环视

eg:查找后面是sql的my: /my\(sql\)\@=

\@! (?! 顺序否定环视

eg:查找后面不是sql的my: /my\(sql\)\@!

\@<= (?<= 逆序环视

eg: 查找前面是my的sql: /\(my\)\@<=sql

\@<! (?<! 逆序否定环视

eg:查找前面不是my的sql: /\(my\)\@<!sql

\@> (?> 固化分组

\%(atom) (?: 非捕获型括号

意思是,此分组不捕获,可以理解为不算在分组信息中,eg:
:%s/\%(my\)sql\(ok\)/\1
上面的命令会将mysqlok替换为 ok ,由于my为捕获在分组中,故组中\1 为ok。