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一个没法匹配到
你的匹配不够完整,我把所有情况穷举出来了,你所疑惑的就在第二个正则,第五种情况
第一个正则: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
我的主要疑惑点是在第二个式子的)?[), ,.,-] 这个位置是如何匹配到(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: (?[0-9]{3})? 你不要把前面的小括号看成一个整体,分开来看就好理解了!
?的意思是,前面的字符可有可无,那么第一个小括号就是存在两种情况,有或者没有,第二个小括号一样的意思