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.47元/天 解锁文章
178

被折叠的 条评论
为什么被折叠?



