分享
 
 
 

教你使用正则表达式

王朝vc·作者佚名  2006-05-23
窄屏简体版  字體: |||超大  

教你使用正则表达式

作者:赖锋

下载源代码

很久没有VCKbase发表文章了,这次发表一些比较基础的文章吧!看过"保证你现在和未来不失业的十种关键技术"这篇文章了吧,这次我就拿出一个不会让你失业的编程技术讲讲吧,老虾们千万不要拿鸡蛋砸我,我只是写给初学者的!

关于正则表达式的教程和用法网上有很多的资源,基本的用法我讲了也是浪费你的眼力,所以我会以一个实例来教你学习正则表达式,我两年前做的一个MIS中使用过正则式,检验用户输入的日期是否为正确的日期格式!分析完这个正则表达式后,对于正则表达式你绝对会有一个深深的认识!但是还不能说你精通,当你可能用正则表达式写一个编译器的时候,你就可以精通了!

“磨刀不误砍柴工”,要使用正则表达式,我们还要使用支持正则表达式的语言,解释性语言Ruby,Perl,Python等都支持正则表达式,C#,Java,VB.net等也支持正则表达式,C++还需要第三方类库才能支持,VC.net提供了一个很好的正则表达式类库CATLRegExp(全世界效率最高的正则表达式库哦),可是却不能在VC6上使用,要在VC6上使用,可以使用VBS(Microsoft VBScript Regular Expression 5.5)来处理正则表达式,这是一个COM,拿一个COM来用我还是情愿用Boost库.

使用Boost库的时候,你需要编译库后你才能使用,不过这很容易。

1.下载Boost库

3.设定环境变量(以我本机的环境变量设定为例)

2.进入 boost_1_32_0\libs\regex\build 目录中,你可以看到vc6.mak文件 nmake vc6.mak就可以了,跟着会产生lib和dll文件,把它拷贝到你的程序目录下就可使用了!

你也可以全部编译,不过我只需要正则表达式库,所以我只编译这部分!

好了,砍柴刀磨好了!我们就开始正则表达式的实践吧!

当时我负责的MIS是医院的一个血液检验输入模块,要求输入的日期必须是合法的,这是第一要求,不然检验单就会报废。输入日期是可以2006.04.02 或 2006/04/02 或 2006.4.2 或 2006/4/2 的格式,而且日期还是要合法的,比如说不可以出现 2006.02.31, 2006.4.41 这样的日期,不排除输入人员工作繁记忙输入错误会出现这种情况。

好了,用正则表达式如何解决这个问题,首先正则表达式是一个对文本匹配模式的使用方法,记得正则表达式的关键字用法是没有用的,各种语言的正则表达式中的关键字用法是不同的,要认识文本中字符的模式.比如说对以上日期的表示可以用正则表达式表示为

"^\\d{4}[\\s\\.-/]\\d{1,2}[\\s\\.-/]\\d{1,2}$"

但这是完全错误的,用文字对这句正则表达式的描述为字符串是由三组数字组成,每一组由四个数组成,第二和第三组由一个或两个数字组成,中间带有空格或"/",4003.9/12,3344.0.40 都会被判为合法的字符,这就是错误的用法!有什么或以判别呢!

有闰日的年份叫闰年,一般年份365天,闰年为366天(二月则有29天),闰年的计算方法:公元纪年的年数可以被四整除,即为闰年;被100整除而不能被400整除为平年;被100整除也可被400整除的为闰年.则这样我们可以这样设计正则表达式,第一个是要求其格式统一,第二个是要求其能正确表达闰年!1000/2/29 合法, 2000/2/29 合法,1900/2/29 非法.

想一想,一年中不论闰年或平年有的月份都是固定的,1,3,5,7,8,10,12月都是 31天, 4, 6, 9, 11 月都是30 天, 2 月可能为 28 或 29天,我们则可以这样判断,除 2 月外, 1 到 12 月中日期为 29, 30 天内的都为合法,1,3,5,7,8,10,12月为31天的都为合法, 1 月到 12 月为 28 天的都为合法, 剩下的只要判断当年是否为闰年就行了,是闰年 2月29日就合法,否则非法!!!

呵,结果就出来了,用"或"把三条正则表达式组合起来就行了,第一条是判断除2月外日期的表达式,第二条是1到12 月都是1-28天的表达式,最后一条是判断是否闰年及合法2月的表达式,若符合其中一条的都为正确的日期.

第一条可以这样写除 2 月外 1 到 12 月都为 30 天的表达式为 (?:0?[1,3-9]|1[0-2])-(?:29|30)

除2 月外 1,3,5,7,8,10,12月都是 31天, ((?:0?[13578]|1[02])-31), 两条合并起来就是:

(?:(?:0?[1,3-9]|1[0-2])-(?:29|30)|((?:0?[13578]|1[02])-31))

第二条可以这样写 (?:0?[1-9]|1[0-2])-(?:0?[1-9]|1\d|2[0-8])

第三条表达式就是要求表示闰年了,能被4 整除的四位数是怎么组成的呢? 可以看出,四位数中最后两位能被四整除都可以得出这个四位数能被4整除,100内为4的倍数的值为04,08,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,能被100与400整除的四位数则可以为##00的形式了

则这样的闰年判别可以为:

(\d\d(?:0[48]|[2468][048]|[13579][26]))与 (?:0[48]00|[2468][048]00|[13579][26]00)

合并后再加入2月日期合并为:

((?:(\d\d(?:0[48]|[2468][048]|[13579][26]))|(?:0[48]00|[2468][048]00|[13579][26]00))-0?2-29)

这样就可得出一条正确的表达式了:

^(?:([0-9]{4}-(?:(?:0?[1,3-9]|1[0-2])-(?:29|30)|((?:0?[13578]|1[02])-31)))|

([0-9]{4}-(?:0?[1-9]|1[0-2])-(?:0?[1-9]|1\d|2[0-8]))|(((?:(\d\d(?:0[48]|[2468][048]|

[13579][26]))|(?:0[48]00|[2468][048]00|[13579][26]00))-0?2-29)))$

这条表达式匹配的日期为2004-02-29,2004-2-29,不匹配2007-2-29,格式固定为####-##-##,只有输入日期正确了才会匹配。

这样就完成一条正则表达式了,不要被吓倒,当你对正则表达式理解越深刻的时候,你才发现它的优美!

在平时的工作中,你可以把一些常用的正则表达式封装成dll,当使用的时候,你可以方便地调用,提高你的效率!

这儿我顺便给出一些常用的正则表达!

合法Email的表达式

^([a-zA-Z0-9_\-])([a-zA-Z0-9_\-\.]*)@(\[((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}|

((([a-zA-Z0-9\-]+)\.)+))([a-zA-Z]{2,}|

(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\])$

合法时间表示表达式[1:00 AM], [12:00 PM], [1:00am]

^(1|01|2|02|3|03|4|04|5|05|6|06|7|07|8|08|9|09|10|11|12{1,2}):(([0-5]{1}[0-9]{1}\s{0,1})

([AM|PM|am|pm]{2,2}))\W{0}$

网站连接:

[http://207.68.172.254/home.ashx], [ftp://ftp.netscape.com/], [https://www.brinkster.com/login.asp]

^((https?|ftp)\://((\[?(\d{1,3}\.){3}\d{1,3}\]?)|(([-a-zA-Z0-9]+\.)+[a-zA-Z]{2,4}))

(\:\d+)?(/[-a-zA-Z0-9._?,''+&%$#=~\\]+)*/?)$

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有