例子:

将所有方法foo(a,b,c)的实例改为foo(b,a,c)

:%s/foo(\([^,]*\),\([^,]*\),\([^,)]*\))/foo(\2,\1,\3)/g

1.零宽断言

就是断言匹配字符串的前后规则

(?=exp)也叫零宽度正预测先行断言[4] ,它断言自身出现的位置的后面能匹配表达式exp。比如\w+(?=ing),匹配以ing结尾的单词的前面部分(除了ing以外的部分),如查找I’m singing while you’re dancing.时,它会匹配sing和danc。

(?<=exp)也叫零宽度正回顾后发断言[4] ,它断言自身出现的位置的前面能匹配表达式exp。比如(?<=re)\w+会匹配以re开头的单词的后半部分(除了re以外的部分),例如在查找reading a book时,它匹配ading。

例子:

字符串45678.002017.12.8
正则\d+.\d{2}(?=.)
匹配结果:2017.12.8

2.负向零宽

(感觉有点像零宽度正回顾后发断言)

零宽度负预测先行断言(?!exp),断言此位置的后面不能匹配表达式exp。例如:\d{3}(?!\d)匹配三位数字,而且这三位数字的后面不能是数字;((?!abc)\w)+匹配不包含连续字符串abc的单词。

例子:

字符串45678.002017.12.8
正则\d+.\d{2}(?!.)
匹配结果:45678.00
字符串/jp/xkj/jportal/xkj-jportal
正则/jp/(?.*)
匹配结果/jp/xkj
替换字符串/jpxkj/${name}
替换结果/jpxkj/xkj