例子:
将所有方法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 |