有一个网站内有300百多个Asp文件,每个文件里几处到几十处不等的SQL语句
由于原来的是Access数据库,现在要改为SQL数据库,有些晕法要做相应修改
如:
select * from gongqiu where gqname ='"&trim(rsad("gqname"))&"' and gqlei = '供应信息' and flag = true"
select * from xinyao where xlxrname ='"&trim(rsad("xlxrname"))&"' and flag = true"
...等等
要把其中的 flag=true 修改成 flag='已审核'
对于上面的要求通过正常的查找替换不容易实现
如: var flag=true; 中也有flag=true;但这是JS脚本中的,不应该替换,在面对这种情况时 正规表达式 就可以派上用场了.
处理方法如下(用的是 DreamWeaver)
正规表达式如下(标记A)
(select|update|delete|inserte)(.*)((daili)|(gongqiu)|(zhanhui)|(zhaoshang)|(xinyao))(.*flag = )(true)(.*)
替换表达式
$1$2$3$9'已审核'$11
说明:
daili,gongqiu 是数据库里的表名
$1,$2...$11 是匹配成功的段
如有 "my name is Liang xin jian" , reg=/(S+)(s+)(S+)/ 则匹配成功时 $1对应my,$2对应 空格,$3 对应 name
因为这段话有六个单词五个空格,这样会匹配成功3,第2次时 $1对应 is ,$2对应 空格,$3对应Liang ......
另外(标记A)中的匹配段有11个,
标记段的计算是按括号个数来计算的如
(a)(b)(c)会对应$1$2$3
(a) (b) (( (c) (d) ) | (e))对应 $1,$2,$3,$4,$5,$6,$7 这个是按最大匹配原则来的.
学过数据结构的应该很好理解,以前多的+-*/表达式求值就才用这种方式来处理括号的.