| 
UID2精华积分7982威望 点宅币 个贡献 次宅之契约 份最后登录1970-1-1在线时间 小时 
 | 
 
| 正则表达式入门经典 看了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)))\>
 
 | 
 |