正则表达式的使用——匹配手机号码、IP地址实例讲解

一、使用场景

典型的搜索和替换操作要求您提供与预期的搜索结果匹配的确切文本。虽然这种技术对于对静态文本执行简单搜索和替换任务可能已经足够了,但它缺乏灵活性,若采用这种方法搜索动态文本,即使不是不可能,至少也会变得很困难。

通过使用正则表达式,可以:

  • 测试字符串内的模式。
    例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码模式。这称为数据验证。
  • 替换文本。
    可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本替换它。
  • 基于模式匹配从字符串中提取子字符串。
    可以查找文档内或输入域内特定的文本。

例如,您可能需要搜索整个网站,删除过时的材料,以及替换某些 HTML 格式标记。在这种情况下,可以使用正则表达式来确定在每个文件中是否出现该材料或该 HTML 格式标记。此过程将受影响的文件列表缩小到包含需要删除或更改的材料的那些文件。然后可以使用正则表达式来删除过时的材料。最后,可以使用正则表达式来搜索和替换标记。

二、语法

① 非打印字符

正则表达式的使用——匹配手机号码、IP地址实例讲解_第1张图片

② 特殊字符

正则表达式的使用——匹配手机号码、IP地址实例讲解_第2张图片

注:如需要匹配这些特殊字符,需进行转义”,即在字符前面加个反斜杠字符’ \’

③ 限定符

正则表达式的使用——匹配手机号码、IP地址实例讲解_第3张图片

④ 定位符

正则表达式的使用——匹配手机号码、IP地址实例讲解_第4张图片

注:定位符不能与限定符一起使用。

正则表达式的菜鸟教程:http://www.runoob.com/regexp/regexp-tutorial.html

正则表达式在线测试工具:http://c.runoob.com/front-end/854

三、实例

① 匹配手机号码

最新手机号码段查询地址:https://www.qqzeng.com/tongji.html

现有手机号码段

移动号段: 134、135、136、137、138、139、147、148、150、151、152、157、158、159、172、178、182、183、184、187、188、198

联通号段:130、131、132、145、146、155、156、166、171、175、176、185、186

电信号段:133、149、153、173、174、177、180、181、189、199

虚拟运营商号段:170

整理上面的手机号码段分析可得:

13开头的第三位数字包含0-9,匹配"13[0-9]"

14开头的第三位数字包含5-9,匹配"14[5-9]"

15开头的第三位数字不包含4的其他9个数字,匹配"15[0-35-9]"

16开头的第三位数字只有6

17开头的第三位数字包含0-8,匹配"17[0-8]"

18开头的第三位数字包含0-9,匹配"18[0-9]"

19开头的第三位数字包含8、9,匹配"19[89]"

其他数字就简单了,只有八位数字,包含0-9,匹配" [0-9]{8}$"或"\d{8}$"

因此,手机号码的正则表达式匹配字符串如下所示:

匹配手机号码段正则表达式:

"^(13[0-9]|14[5-9]|15[0-35-9]|166|17[0-8]|18[0-9]|19[89])[0-9]{8}$"

"^(13[0-9]|14[5-9]|15[0-35-9]|166|17[0-8]|18[0-9]|19[89])\d{8}$"

② 匹配IP地址

IP地址的格式:[0,255].[0,255].[0,255].[0,255]

这里四段的数字都是0-255之间,这个区间可分为五种情况,如下:

一位数时,可为09,即[0,9],匹配”\d””[0-9]”

两位数时,十位数为19,个位数为09,即[10,99] ,匹配”[1-9]\d”

三位数且百位数为1时,十位数与个位数可为09,即[100,199] ,匹配”1\d\d”

三位数且百位数为2时,十位数为04,个位数为0-9,即[200,249] ,匹配”2[0-4]\d”

三位数且百位数为2时,十位数为5,个位数为0-5,即[250,255] ,匹配”25[0-5]”

因此,IP地址的正则表达式匹配字符串如下所示:

^((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$

 

你可能感兴趣的:(其他)