找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 2944|回复: 0

正则表达式研究心得

[复制链接]

307

主题

228

回帖

7335

积分

用户组: 真·技术宅

UID
2
精华
76
威望
291 点
宅币
5585 个
贡献
253 次
宅之契约
0 份
在线时间
947 小时
注册时间
2014-1-25
发表于 2014-1-29 13:19:58 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
正则表达式入门经典 看了150页,精髓已经掌握了
要点元符号:
\<单词开始
\>单词结束
^行开始
$行结束
|逻辑并列
.一个字符
*零个或多个字符
+1个或多个字符
\直接量句点
\d数字
\D非数字
[]字符类
{m,n}最少m次,最多n次
\w英文字母数字下划线
\W 匹配\w不匹配的字符
\s单个空白字符
\S非空白字符
\t制表符
\n换行符
\b回格符 词边界
^作为字符类首字符时表示对字符类取反
&&逻辑与
有一个例子是匹配ip地址的,但是书上给的答案不能匹配形如061.25.255.000这种,因此我做了修改,可以匹配任意ip:\<([0-9]|[1-9][0-9]|[01][0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|[01][0-9][0-9]|2[0-4][0-9]|25[0-5])){3}\>
另一个例子是检测日期正确性,例如1999-01-01
为了枚举实例验证,我用了windows 命令提示符,写下如下命令,生成1900-1-1至2100-1-1所有日期字符串:for /L %i in (1900,1,2100) do (for /L %j in (1,1,12) do (for /L %k in (1,1,31) do echo %i-%j-%k >> C:\Users\Administrator\Desktop\and.txt))
我这个表达式可以检测每个月日期是否正确,但是无法判断平年闰年,2月就当有29日,不过对于初步检测,完全够了。
分析如下:
1 3 5 7 8 10 12:1-31
1-9
01-09
10-29
30-31
((0?[13578])|10|12)\-((0?[1-9])|[12][0-9]|3[01])
2:1-29
1-9
01-09
10-29
0?2\-((0?[1-9])|[12][0-9])
4 6 9 11:1-30
1-9
01-09
10-29
30
((0?[469])|11)\-((0?[1-9])|[12][0-9]|30)
最后得到:\<((19|20)[0-9][0-9]\-((((0?[13578])|10|12)\-((0?[1-9])|[12][0-9]|3[01]))|0?2\-((0?[1-9])|[12][0-9])|((0?[469])|11)\-((0?[1-9])|[12][0-9]|30)))\>
回复

使用道具 举报

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-4-20 05:44 , Processed in 0.043904 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表