正则表达式常见题目解析

接上一篇的正则表达式的常规语法后,对一些常见的正则表达式匹配问题进行解析,顺带练习一下。

第一题:正则表达式匹配IP地址

            IP地址由4个字节组成,每两个字节之间以.隔开,比如121.156.0.1。每一位的范围是{0,255},因此除了正确匹配数字和数字的个数外,还要注意每一位的取值范围。

常见的做法如下所示:

       1. 是将每一位拆分成三部分{0,200},{200,249},{250,255}。分别为[01]?\d\d?,2[0-4]\d,25[0-5]

       2. 然后使用分支匹配方法|来连接三部分,后面再加一个.号,构成一个分组。( ( [01]?\d\d?  |  2[0-4]\d  |  25[0-5] )\. ) 

       3. 重复前面的分组三次。( ( [01]?\d\d?  |  2[0-4]\d  |  25[0-5] )\. ) {3}

       4. 最末一位以同样的拆分表示法,只表示出数字就可以了。( ( [01]?\d\d?  |  2[0-4]\d  |  25[0-5] )\. ) {3}(  [01]?\d\d?  |  2[0-4]\d  |  25[0-5] )

       使用C++11进行正则表达式匹配,需要添加#include

bool isIPValid(const string& ip)
{
 regex pattern(("((([01]?\\d\\d?)|(2[0-4]\\d)|(25[0-5]))\\.){3}(([01]?\\d\\d?)|(2[0-4]\\d)|(25[0-5]))"));
 return regex_match(ip,pattern);
}

第二题:匹配手机号和带区号的固话号码

       匹配以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+$

       

你可能感兴趣的:(正则表达式常见题目解析)