学习正则表达式的注意事项
1.123456789|456|45 将” | “左右的看成整体,即使没有();
2. 注意正则表达的的斜杠为” \ “,不为" / ".
3.正则表达式[ ]中的字符,默认为普通字符,没有正则表达式的特殊字符的含义。
国内电话:\d{3}-\d{8}|\d{4}-\{7,8}
腾讯QQ:[1-9][0-9]{4,}
电子邮件:[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?
年月日:([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8])))
分析:
([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})- 表示年份
(
(0[13578]|1[02]) - (0[1-9] | [12][0-9]| 3[01]))| 表示月份和日,有31天的月份和日
( (0[469]|11) - (0[1-9] | [12][0-9]|30)) | 表示30天的月份和日
(02 - (0[1-9] | [1][0-9]|2[0-8]))
)
((((19|20)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((19|20)\d{2})-(0?[469]|11)-(0?[1-9]|[12]\d|30))|(((19|20)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|((((19|20)([13579][26]|[2468][048]|0[48]))|(2000))-0?2-(0?[1-9]|[12]\d)))$
优化为:
((((19|20)\d{2})-(0?(1|[3-9])|1[012])-(0?[1-9]|[12]\d|30))|(((19|20)\d{2})-(0?[13578]|1[02])-31)|(((19|20)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|((((19|20)([13579][26]|[2468][048]|0[48]))|(2000))-0?2-29))$
该表达式的匹配规则(按以下序号为顺序):
1.匹配除了2月份之外的1-30日
2.若1无法匹配,则匹配1,3,5,7,8,10,12月份的31日
3.若2无法匹配,则匹配2月份的1-28日
4.若以上都无法匹配,那只可能剩下一天,那就是闰年2月份的最后一天2月29日