一、使用场景
典型的搜索和替换操作要求您提供与预期的搜索结果匹配的确切文本。虽然这种技术对于对静态文本执行简单搜索和替换任务可能已经足够了,但它缺乏灵活性,若采用这种方法搜索动态文本,即使不是不可能,至少也会变得很困难。
通过使用正则表达式,可以:
例如,您可能需要搜索整个网站,删除过时的材料,以及替换某些 HTML 格式标记。在这种情况下,可以使用正则表达式来确定在每个文件中是否出现该材料或该 HTML 格式标记。此过程将受影响的文件列表缩小到包含需要删除或更改的材料的那些文件。然后可以使用正则表达式来删除过时的材料。最后,可以使用正则表达式来搜索和替换标记。
① 非打印字符
② 特殊字符
注:如需要匹配这些特殊字符,需进行”转义”,即在字符前面加个反斜杠字符’ \’。
③ 限定符
④ 定位符
注:定位符不能与限定符一起使用。
正则表达式的菜鸟教程: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之间,这个区间可分为五种情况,如下:
一位数时,可为0到9,即[0,9],匹配”\d”或”[0-9]”;
两位数时,十位数为1到9,个位数为0到9,即[10,99] ,匹配”[1-9]\d”;
三位数且百位数为1时,十位数与个位数可为0到9,即[100,199] ,匹配”1\d\d”;
三位数且百位数为2时,十位数为0到4,个位数为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])$