シェルパターンマッチングと算術演算子(+ - * / %)

シェルパターンマッチングと算術演算子(+ - * / %)

これは簡単に見えますが、そうではありません。

[[ "1234+5678" =~ [0-9]+(\s*(\-|\*)\s*[0-9]+)* ]] && echo $?

1を返します0。ただし、マイナス(-)と乗算(*)演算子のみが許可されるため、実際には実行しないでください。また、オンラインでいくつかの正規表現ツールを見つけて、このパターンを一致させました。結果は空の文字列です。 (予想通り)

散文では、拡大する正規表現は次のとおりです。

  • 番号を探す(必須)
  • 少し空白があることを確認してください。
  • -演算子はまたはaでなければなりません。*
  • 空白があることを再確認してください。
  • 他の番号を探す(演算子が前に来る場合は必ず存在する必要があります)

また、括弧内の式の後に続くアスタリスクは、2番目からn番目の演算子番号のペアがオプションであることを示します。

ここで私の考えに何の問題がありますか?

ベストアンサー1

タグがない場合、正規表現(右側の部分)は次のことができます。どの部分とも一致ひも。したがって、バリアントはと一致します1234。要件を満たすには、タグを使用する必要があります。

[[ "1234+5678" =~ ^[0-9]+(\s*(\-|\*)\s*[0-9]+)*$ ]] ; echo $?

短く(必要に応じて):

[[ "1234+5678" =~ ^[0-9\ *-]+*$ ]] ; echo $?

おすすめ記事