正则表达式常见题目解析

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

第一题:正则表达式匹配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 <regex>

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+$

相关文章

jquery.validate使用攻略(表单校验) 目录 jquery.validate...
/\s+/g和/\s/g的区别 正则表达式/\s+/g...
自整理几个jquery.Validate验证正则: 1. 只能输入数字和字母...
this.optional(element)的用法 this.optional(element)是jqu...
jQuery.validate 表单动态验证 实际上jQuery.validate提供了...
自定义验证之这能输入数字(包括小数 负数 ) &lt;script ...