目标
提取以下片段中的“.bbb”共四个字符,第1,6行不能替换,其余替换为[‘bbb’]
aaaa.bbbccc
aaaa.bbb.
aaaa.bbb =
aaaa.bbb(
aaaa.bbb{
aaaacccc
vim基础知识
在vim命令模式中,括号被视为普通字符
vim环视
- \@= 顺序环视 查找后面是“.bbb”的“aaaa”
/aaaa\(.bbb\)\@=
- \@! 顺序否定环视 查找后面不是“.bbb”的“aaaa”
/aaaa\(.bbb\)\@!
- \@<= 逆序环视 查找前面是“aaaa”的“.bbb”
/\(aaaa\)\@<=.bbb
- \@<! 逆序否定环视 查找前面不是“aaaa”的“.bbb”
/\(aaaa\)\@<!.bbb
- 非捕获型括号
\%(xxxx\) # xxxx为非捕获内容
替换操作
则正则表达式如下
:%s/\%(aaaa\)\@<=\(\.\)\(.*\)\%( \|(\|{\|\.\)\@=/['\2']/g
替换后效果如下:
aaaa.bbbccc
aaaa['bbb'].
aaaa['bbb'] =
aaaa['bbb'](
aaaa['bbb']{
aaaacccc