正则表达式常见题目解析

前端之家收集整理的这篇文章主要介绍了正则表达式常见题目解析前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

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

原文链接:https://www.f2er.com/regex/362646.html

猜你在找的正则表达式相关文章