正则表达式记录


正则表达式一:

c_address        = sAddress,
c_zipcode        = sZipcode,
c_phone          = sPhone,
c_faxno          = sFaxno,
c_email          = sEmail,
c_mobileno       = sMobileno,
c_bp             = sBP,
c_birthday       = sBirthday,

如何用正则表达式将以上结果替换为:
'c_address',
'c_zipcode',
'c_phone',
'c_faxno',
'c_email',
'c_mobileno',
'c_bp',
'c_birthday',

首先,有一个“=”可以让我们将左边部分截取出来:
(.*)(=.*),\n
然后,由于等号之前有部分空格,需要将此部分空格也过滤掉:
尝试(.*)( *=.*),\n
但是由于表达式的第一部分.*已经将空格包含进去,所以无法在第二部分中取到空格。于是考虑在第一部分中过滤掉空格:
([^ |.]*)( *=.*),\n
这样就可以完整的将左边部分(不含空格)的字符串取出。然后替换:
'\1',\n
以上是Editplus中的正则表达式语法。不过与vim和shell中的语法还是非常类似的。

再写一个:
sSuccessFlag  := fillBlank (sSuccessFlag, 1);
sFailInfo     := fillBlank (sFailInfo, 46);
sReserve3     := fillBlank (sReserve3, 40);
sAddress      := fillBlank (sAddress, 200);
sZipcode      := fillBlank (sZipcode, 6);
sPhone        := fillBlank (sPhone, 40);
sFaxno        := fillBlank (sFaxno, 40);
sEmail        := fillBlank (sEmail, 100);
以上每行,如何替换成:
sEmail := substrb(sEmail,1,100);
这样的字符串,可以用如下语句:
(.*) := (.*), ([0-9]*).*;
替换目标:
\1 := substrb(\1,1,\3)
即可。

正则表达式二:
有如下建表语句:
    n_netvalue_id      number(38) primary key not null, --对象id
    c_fundcode         varchar2(38) not null,  --证券id(基金帐号)
    c_bulletin_day     varchar2(8),                   --公告日期
    c_expire_date      varchar2(8),                   --截止日期
    f_netvalue         number(20,4),           --单位净值
    f_cml_netvalue     number(20,4),           --累计单位净值
    f_property         number(20,4),           --资产净值
现在,要将以上格式的注释转成comment语句的形式,该如何?
首先,基本的思路是将每行分成三个部分:
字段名、字段类型及约束或主键参数、注释部分。

按照这个思路,
第一部分则可以这样:(^[^ ]*)
这句话的意思是找出第一个不含空格的字符串,该字符串不能以空格开头。

第二部分,比较麻烦,因为空格和非空格的字符串有可能交替出现,匹配的思路是找出任意个空格开始的、且以任意个空格结尾的,中间含有任意字符的字符串,按照这个模式,就有以下表达式:([ ]*.*[]*)。

第三部分就简单了,只要这样:--(.*),即找出--后的所有字符。
合并起来就是这样:(^[^ ]*)([ ]*.*[ ]*)--(.*)

试试看吧!:D......
注意:以上正则表达式在Editplus下面测试通过。




请使用浏览器的分享功能分享到微信等