正则表达式常见题目解析
接上一篇的正则表达式的常规语法后,对一些常见的正则表达式匹配问题进行解析,顺带练习一下。 第一题:正则表达式匹配IP地址 IP地址由4个字节组成,每两个字节之间以.隔开,比如121.156.0.1。每一位的范围是{0,255},因此除了正确匹配数字和数字的个数外,还要注意每一位的取值范围。 常见的做法如下所示: 1. 是将每一位拆分成三部分{0,200},{200,249},{250,255}。分别为[01]?dd?,2[0-4]d,25[0-5] 2. 然后使用分支匹配方法|来连接三部分,后面再加一个.号,构成一个分组。( ( [01]?dd? |2[0-4]d | 25[0-5] ). ) 3. 重复前面的分组三次。( ( [01]?dd? | 2[0-4]d | 25[0-5] ). ) {3} 4. 最末一位以同样的拆分表示法,只表示出数字就可以了。( ( [01]?dd? | 2[0-4]d | 25[0-5] ). ) {3}( [01]?dd? | 2[0-4]d | 25[0-5] ) 使用C++11进行正则表达式匹配,需要添加#include <regex> bool isIPValid(const string& ip) 第二题:匹配手机号和带区号的固话号码 匹配以1开头,第二位(从左开始)为3,4,5,8中的一个,其余为0到9的数字的手机号码:1[3458]d{9} 匹配形式如:0511-4405222 或者021-87888822 或者 021-44055520-555 或者 (0511)4405222的正则表达式:( (d{3,4}) |(d{3,4}-))?d{7,8}( -d{3,4})* 第三题:匹配邮箱地址 合法的邮箱地址的要求:只包含一个@;第一个字符不能是@或.;结尾不能是@或.;允许出现_,但是只能放在@前,不能和@连起来 ^(w+)(. | _)?w+@w+.w+$ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |