我想使用以下与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)
发布于 2018-06-05 06:24:43
因为这里使用的范围是固定长度的,所以您可以简单地写出整个范围[0-9]{3}
=> [0-9][0-9][0-9]
。而不是(| |-|.)
,( |-|.)?
--尽管我很困惑:除了空间和-
之外,你还允许任何角色(.
)吗?那么它可能只是.?
,因为空间和-
无论如何都是由.
匹配的。如果要匹配文本句点.
,则应该使用[- .]?
(前面的-
是避免将其解释为字符范围)。所以:
^\(?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]$
https://unix.stackexchange.com/questions/447905
复制相似问题