%3A%20%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E7%BC%96%E8%AF%91%E5%A4%B1%E8%B4%A5%EF%BC%88%E7%BC%BA%E5%B0%91%E6%93%8D%E4%BD%9C%E6%95%B0%EF%BC%89.png)
我想将以下正则表达式与 awk 一起使用来验证电话号码:
echo 012-3456-7890 | awk '/^\(?0[1-9]{2}\)?(| |-|.)[1-9][0-9]{3}( |-|.)[0-9]{4}$/ {print $0}'
但我收到以下错误:
awk: line 1: regular expression compile failed (missing operand)
答案1
由于此处使用的范围是固定长度的,因此您可以简单地写出整个范围[0-9]{3}
=> [0-9][0-9][0-9]
。而不是(| |-|.)
, ( |-|.)?
- 尽管我很困惑:.
除了空格和 之外,您还允许任何字符 ( )吗-
?那么它可能只是.?
因为空间和无论如何-
都匹配.
。如果您匹配文字 period .
,那么您应该使用[- .]?
(前导-
是为了避免解释为字符范围)。所以:
^\(?0[1-9]{2}\)?(| |-|.)[1-9][0-9]{3}( |-|.)[0-9]{4}$
变成:
^\(?0[1-9][1-9]\)?[- .]?[1-9][0-9][0-9][0-9][- .][0-9][0-9][0-9][0-9]$