國內**號碼目前一般採用區號+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])\)?
其間使用或表達和表示式分組以及區間和排除性字元「^6」(排除026)等。最後同樣需要「\」對「)」進行轉義。「[1][0]|[2]([^6])|[1-9]」匹配北京010和02x以及0***(4位區號)的情況。
3. 匹配「——」或空格或無符號使用管道 (—|空格|)
4. 匹配7或8位**號碼,使用間隔。
[1-9][[:digit:]]
[1-9]過濾掉首位為0的情況。為啥這裡不能用[^0]呢?有沒有認真想一想?因為單純只排除0外,還有很多其他字元,可不能保證一定就是數字了。
加入錨字元,完整模式如下:
『/^(?0)?(-| |)[1-9][[:digit:]]$/』
#/bin/bash
#program:
# script to filter bad phone numbers
gawk --re-interval '/^\(?[0]([1][0]|[2]([^6])|[1-9])\)?(-| |)[1-9][[:digit:]]$/'
```測試結果如下:```
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
`
shell擴充套件正規表示式
匹配前面子表示式1次以上 例如 go d,將匹配至少乙個o 如god,good,goood 匹配前面子表示式0次或者1次 例如 go?d,將匹配gd或god 括號中的字串作為乙個整體 例如 xyz 將匹配xyz整體1次以上,如xyzxyz 以或的方式匹配字條串 例如1 good food,將匹配go...
擴充套件正規表示式
事實上,一般實驗者只需要熟悉基礎的正規表示式就足夠了。不過有時候為了簡化命令操作,了解一些使用範圍更廣的擴充套件表示式,會更加方便。正規表示法 grep v regular express.txt grep v 需要使用到管線命令來搜尋兩次!那麼如果使用延伸型的正規表示法,我們可以簡化為 egrep...
擴充套件正規表示式
使用egrep或者grep e 一般都是使用egrp 語法 擴充套件正規表示式 re字元 意義與範例 重複乙個或者乙個以上的前乙個字元 egrep n go d regular express.txt 零個或者乙個前乙個字元 egrep n go?d regular express.txt or的意...