web-dev-qa-db-ja.com

awk(mawk):正規表現のコンパイルに失敗しました(オペランドがありません)

次の正規表現を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
sci9

ここで使用される範囲は固定長であるため、範囲全体を単純に書き出すことができます[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]$
4
muru