元始天尊 发表于 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:\<(|||2|25)(\.(|||2|25)){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?)|10|12)\-((0?)||3)
2:1-29
1-9
01-09
10-29
0?2\-((0?)|)
4 6 9 11:1-30
1-9
01-09
10-29
30
((0?)|11)\-((0?)||30)
最后得到:\<((19|20)\-((((0?)|10|12)\-((0?)||3))|0?2\-((0?)|)|((0?)|11)\-((0?)||30)))\>
页: [1]
查看完整版本: 正则表达式研究心得