|
5#
楼主 |
发表于 2013-3-20 15:26:40
|
只看该作者
本帖最后由 todaynew 于 2013-3-20 16:04 编辑
轻风 发表于 2013-3-20 14:11
老汉最近正则表达式用得越来越得心应手啊!
代码中没有注释,看得头晕。
strmatch = "(^出租方:)(.*)((?:\r\n)+承租方:)(.*)((?:\r\n)+(?:.*|(?:\r\n)+)*$)"
If TestStr(str, strmatch) = True Then
Restr = "$1" & Me.出租方.Value & "$3" & Me.承租方.Value & "$5"
str = ReplaceMatch(str, strmatch, Restr)
Me.合同.Caption = str
End If
以上代码的解释:
一、strmatch存放的是一个正则表达式,这个正则表达式可以写为:
1、(^出租方:)表示文章的开始是“出租方:”,其中^表示字符串的开始位置的通配符。
2、(.*)表示一串各种类型的字符,其中“.”通配任意字符,“*”表示重复0到任意次数。
3、(?:\r\n)+表示一个以上的回车符与换行符,\r为回车符即chr(13),\n为换行符即chr(10),“+”表示至少一次(与“*”类似,只是起始值不同,“*”可以是0次),(?:正则表达式)中的“?:”表示不捕获这个正则表达式变量。
4、(?:.*|(?:\r\n)表示或者是一串连续的字符,或者是回车符与换行符,也就是所有段落(也可以写成"(?:.*\r\n)"一段字符串紧跟着回车换行符)。
5、成对出现的括号中,除了包含?:这样的东西外,都是被捕获到的正则表达式变量,所以这个表达式总共有5个正则表达式变量,它们从左到有依次默认的变量名为$1、$2、$3、$4、$5。
二、Restr中存放的也是一个正则表达式,所不同的是它直接调用strmatch中捕获到的正则表达式变量,并重新拼凑正则表达式。也就是将正则表达式变量$2、$4分别用Me.出租方.Value和Me.承租方.Value替换掉。实际上$2和$4变量标识出的是一个替换位置。所以strmatch也可以采用环视(有的文章叫做零带)的方式来写,这样也可以方便的找到需要替换的位置。
三、ReplaceMatch(str, strmatch, Restr)做正则表达式替换。
四、在后面用了一个strmatch = "(^(?:.*\r\n)*\s+.*租女友时间:)(.*)(至)(.*)(,共计)(\d+)(天,每天基本租金)(\d+)((?:元)(?:.*\r\n)*$)"的正则表达式,大部分的正则表达式元字符在前面都已经解释过了,只有两个需要说明一下:
1、\s+表示多个连续的空格;
2、\d+表示多个连续的数字字符。
五、表示一种匹配结果的正则表达式可以有很多种写法,这与对正则表达式熟悉的程度和个人习惯有关。
六、正则表达式示意图
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|