1

私は単純なコマンド ライン ツールを作成しており、ユーザー入力を次の形式で一致させる必要があります。

0;60s (0 ~ 60 秒)

0;60m(0~60分)

したがって、次のことを確認する必要があります。

  • 最初の数字は 0 から 60 の間でなければなりません
  • 2 番目の数値も 0 から 60 の間でなければなりません
  • 持つ必要があります ";" 範囲の間
  • 「s」または「m」で終わる必要があります
  • 2 番目の数値は最初の数値よりも大きい必要があります

そのための最良のアプローチは何ですか?

どうもありがとう!

4

2 に答える 2

1

基本パターンをセマンティクスから分離します。つまり、正規表現で「数字-セミコロン-数字-s/m」をチェックします。そして、数値がプログラムで目的の範囲内にあることを確認します。

これは Ruby で行う最善の方法ではないかもしれませんが、基本的な考え方は次のとおりです。

input =~ /^(\d+);(\d+)[sm]$/

# make sure that 0 <= Integer($1, 10) < Integer($2, 10) <= 60

最初の行の後に、それぞれ 1 番目$1$22 番目の括弧のセット内に見つかったものを含めます。

[0,60]正規表現内の範囲をチェックすることも可能ですが、不必要に醜くなります。に置き換え\d+ます[0-5]?[0-9]|60

于 2013-04-14T22:56:30.863 に答える