これは簡単に見えますが、そうではありません。
[[ "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 $?