Stay hungry, Stay foolish

0%

Vim正则替换一例

Demo

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$result = array(
0,
$v['user'] ? round($v['day1']/$v['user'], 4) * 100 : 0;
$v['user'] ? round($v['day2']/$v['user'], 4) * 100 : 0;
$v['user'] ? round($v['day3']/$v['user'], 4) * 100 : 0;
$v['user'] ? round($v['day4']/$v['user'], 4) * 100 : 0;
$v['user'] ? round($v['day5']/$v['user'], 4) * 100 : 0;
$v['user'] ? round($v['day6']/$v['user'], 4) * 100 : 0;
$v['user'] ? round($v['day7']/$v['user'], 4) * 100 : 0;
$v['user'] ? round($v['day14']/$v['user'], 4) * 100 : 0;
$v['user'] ? round($v['day30']/$v['user'], 4) * 100 : 0;
);

需求

将Demo中的所有$v[‘dayN’]替换为($v[‘user’] - $v[‘dayN’])(其中N为1,2,3,4,5,7,14,30这几个数字)

分析

  • 使用正则匹配
  • 替换的时候能使用匹配的结果

实现

1
4,12s/$v\['day\(\d\+\)'\]/($v['user'] - $v['day\1'])/

或者用下面这个更加简短:

1
4,12s/\($v\['day\d\+'\]\)/($v['user'] - \1)/

说明

  • 4,12是要替换的起止行数
  • 正则中的特殊符号需要转义,如括号(())、方括号([])、加号(+)等
  • 获取匹配的结果用下划线加数字,如\1获取匹配的每一个结果
据说打赏我的人,代码没有BUG