本篇博客收录了一些常用的正则表达式,收录的目的有两个:
一是通过解决 实际问题对前面 5 篇作一个总结
二是向大家提供一些现成的模式以帮助大家节省这方面的时间和精力
常用的正则表达式
1 中国的固定电话号码 规律是最开始一位是0,表示长途,接着是2、3位数字组成的区号,然后是7、8位的电话号码,其中首位不为1(1 用于特殊号码)
写法为 \(?0[1-9]\d{1,2}\)?[-]?[2-9]\d{2,3}[-]?\d{4}
2 中国的邮编 规律是前两位表示省、市、自治区,第三位代表邮区,第四位代表县、市,最后两位代表投递邮局. 共 6 位数字.其中第 2 位不为8(港澳前两位为99, 其余省市为0-7). 对应的正则表达式可以写为: \d(9|[0-7])\d{4}
3 中国公民身份证号 规律是15位或 18 位.前6位是户口所在地编码,其中第一位是1-8, 此后是出生年月日,出生年份前2位只能是18,19,20,而且是可选的(兼顾15位), 月份中第一位只能是0或1,日期的第一位只能是0-3,最后一位校验码是数字或者X,可选(兼顾15位).
对应的正则表达式可以写为: [1-8]\d{6}((19)|(20))?\d {2}[01-12][01-31]\d{2} [\dx]?
4 IP地址 看一个示例 localhost is 127.0.0.1
正则表达式 (((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})(1\d{2})|(2[0-4]\d)|(25[0-5]))
结果是 localhost is 127.0.0.1
5 URL 地址, 匹配URL 地址是有一定难度的
写法是: https?://[-\w.]+(:\d+)?(/([\w/_.]*)?)?
URL 地址不要求必须以大写形式写出,所以在使用上面这个正则表达式进行匹配时一般用不着区分字母的大小写
如果要匹配ftp地址,将https?替换为(http|https|ftp) 即可, 注意这个表达式不能正确处理查询字符串.不过对于匹配到主机名、端口号和文件路径还是可以的
6 完整的 URL 路径
下面这个模式匹配到URL 查询字符串
https?://(\w*:\w*@)?[-\w.]+(:\d+)?(/([\w/_.]*(\?\S+)?)?)?
这里紧跟在https?://后面的是(\w*:\w*@)?,它将匹配嵌在 URL 字符串里的用户名和密码, 用户名和密码要用: 隔开,它们的后面还跟着一个 @ 字符
它将匹配类似以下URL地址:
将6 与5比较,涉及到一个问题: 能不能总是使用这个更完备的模式来取代前一个呢? 从理论上讲,这没有问题,但在实际项目,因为这个模式比较复杂、处理速度也比较慢,如果没有必要,还是不使用它比较好!
7 Email 地址
(\w+\.) * \w+@(\w+\.)+[A-Za-z]+ ,电子邮件不要求必须以大写形式写出,所以在使用这个表达式进行匹配时一般用不着区分字母的大小写
分析: (\w+\.)*\w+ 匹配电子邮件地址的用户名部分 (@ 之前的所有文本)
这一部分又包括 (\w+\.)* 匹配一些由.结束的文本的 0次 或 多次重复出现, \w 匹配必不可少的文本
(\w+\.) 匹配至少一个以. 结束的字符串,
[A-Za-z] 匹配顶级域名 (com、cn、org、us、uk、edu等)
8 HTML 注释
HTML 注释必须放在<!-- 和 --> 标签之间
<!-{2,}.*?-{2,}> , 这个模式匹配两个或多个连字符(-), 所以还可以用来查询 CFML 注释(这种注释的开始/结束标签里包含着 3个连字符)
9 JS注释
JS,或ActionScript 和 ECMA Script 代码里的注释都以// 开头