首页新闻找找看学习计划

shell的gawk扩展正则表达式匹配电话号码

0
悬赏园豆:20 [已解决问题] 解决于 2019-03-05 09:10

gawk -n '/^(?[0-9]{3})?[, ,.,-]/' phon

(234) 345-789
234-345-789
234-345.789
234 345.789
000-000-0000
123-456-7890
212-555-1234

(202) 555-9876
234.123.4567
gawk -n '/^(?[0-9]{3})?[), ,.,-]/' phon

(234) 345-789
(234)345-789
234-345-789
234-345.789
234 345.789
000-000-0000
123-456-7890
212-555-1234
(317)555-1234

(202) 555-9876
234.123.4567
以上两种写法匹配出的结果无法理解就是中括号中 一个能匹配到(317)555-1234一个没法匹配到

TNL的主页 TNL | 初学一级 | 园豆:169
提问于:2019-02-27 17:54
< >
分享
最佳答案
1

你的匹配不够完整,我把所有情况穷举出来了,你所疑惑的就在第二个正则,第五种情况

第一个正则:awk -n '/^(?[0-9]{3})?[, ,.,-]/' phon

第1种:(000) 000
第2种:(000).000
第3种:(000)-000

第4种:(000 000
第5种:(000.000
第6种:(000-000

第7种:000) 000
第8种:000).000
第9种:000)-000

第10种:000 000
第11种:000.000
第12种:000-000

第二个正则:awk -n '/^(?[0-9]{3})?[), ,.,-]/' phon

第1种:(000))000
第2种:(000) 000
第3种:(000).000
第4种:(000)-000

第5种:(000)000 这里可以匹配 (317)555-1234 (234)345-789
第6种:(000 000
第7种:(000.000
第8种:(000-000

第9种: 000))000
第10种:000) 000
第11种:000).000
第12种:000)-000

第13种:000)000
第14种:000 000
第15种:000.000
第16种:000-000

收获园豆:20
三人乐乐 | 老鸟四级 |园豆:3195 | 2019-03-01 15:35

我的主要疑惑点是在第二个式子的)?[), ,.,-] 这个位置是如何匹配到(000)000 按理说我匹配到)后后面是是应该是或逻辑去匹配)空格 点号 -等四个符号 那他是如何匹配到数字的即(234)345-789这种
awk -n '/^(?[0-9]{3})?[), ,.,-]/p' phon

(234) 345-789
(234)345-789
234-345-789
234-345.789
234 345.789
000-000-0000
123-456-7890
212-555-1234
(317)555-1234

(202) 555-9876

TNL | 园豆:169 (初学一级) | 2019-03-01 16:51

@TNL: (?[0-9]{3})? 你不要把前面的小括号看成一个整体,分开来看就好理解了!
?的意思是,前面的字符可有可无,那么第一个小括号就是存在两种情况,有或者没有,第二个小括号一样的意思

三人乐乐 | 园豆:3195 (老鸟四级) | 2019-03-01 17:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册