Shell扩展正则表达式练习1——电话号码过滤

1 篇文章 0 订阅
1 篇文章 0 订阅

Shell扩展正则表达式练习1——电话号码过滤

国内电话号码目前一般采用区号+7位或8位阿拉伯数字组成,为了尽可能达到练习的目的,自己添加一些规则:

①3位区号:如北京010,上海021,西安029,这里有个例外就是026并未分配,需要做排除处理。②4位区号必须以0开头。③7位或8位电话号码首位必不能为0,。
电话号码常见书写格式自行定义如下几类,如:
  0934—12345678
  093412345678
(0934)空格12345678
(0934)—12345678

1. 先对最左边括号做模式匹配,区号有带“()”也有不带“()”的情况,可用“^\(?”,因为“(”为特殊字符,所以需要用“\”进行转义。
2. 匹配区号
	[0]([1][0]|[2]([^6])|[1-9]{3})\)?
	其间使用或表达和表达式分组以及区间和排除性字符“^6”(排除026)等。最后同样需要“\”对“)”进行转义。“[1][0]|[2]([^6])|[1-9]{3}”匹配北京010和02X以及0XXX(4位区号)的情况。
3. 匹配“——”或空格或无符号使用管道 (—|空格|)
4. 匹配7或8位电话号码,使用间隔。
	[1-9][[:digit:]]{6,7}
	[1-9]过滤掉首位为0的情况。为啥这里不能用[^0]呢?有没有认真想一想?因为单纯只排除0外,还有很多其他字符,可不能保证一定就是数字了。

加入锚字符,完整模式如下:

‘/^(?0)?(-| |)[1-9][[:digit:]]{6,7}$/’

#/bin/bash
#Program:
#       script to filter bad phone numbers
gawk --re-interval '/^\(?[0]([1][0]|[2]([^6])|[1-9]{3})\)?(-| |)[1-9][[:digit:]]{6,7}$/'

```测试结果如下:

```bash

```bash
[root@test script]# cat iphonelist
093487654321
09347654321
0934654321
022-87654321
(012)87654321
(026)87654321
(022)-7654321
(5305)76543210
(0755) 76543210

[root@test script]# cat iphonelist | ./isphone.sh
093487654321
09347654321
022-87654321
(022)-7654321
(0755) 76543210

`
		

	
	
	


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值