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

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

ここで使用される範囲は固定長なので、全体範囲[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]$

関連情報