0

コンソールの入力引数を検証する必要があります。ユーザーは、スペースで区切られた 2 つの引数のみを渡すことができます。

  1. 最初の引数は 1 から 100 の間でなければなりません
  2. 2 番目の引数は 1 から 750 の間でなければなりません。

入力を検証するには正規表現が必要です。助けてください。

4

4 に答える 4

4

説明

この正規表現は 1-100 スペース 1-750 に一致します

^\b([1-9][0-9]?|100)\b\s+\b([1-9][0-9]?|[1-6][0-9]{2}|7[0-4][0-9]|750)\b$

ここに画像の説明を入力

エキスパンド

  • ^文字列の先頭に一致
  • \b単語境界に一致
  • (キャプチャ グループ 1 を開く
    • [1-9]ゼロを含まない任意の 1 桁に一致し、その後に続く
    • [0-9]?任意の 1 桁または 0 桁に一致
    • |また
    • 100数百に一致
    • )キャプチャ グループ 1 を閉じる
  • \b\s+\b単語区切り、スペース、および単語区切りが必要です。
  • (キャプチャ グループ 2 を開始
    • [1-9]ゼロを含まない任意の 1 桁に一致し、その後に続く
    • [0-9]?任意の 1 桁または 0 桁に一致
    • |また
    • [1-6]1 から 6 までの任意の数字に一致し、その後に
    • [0-9]{2}任意の数字の 2 つに一致
    • |また
    • 77 の後に続く一致
    • [0-4]0 から 4 までの数字に一致し、その後に
    • [0-9]任意の 1 桁に一致
    • |また
    • 750数字の 750 に一致
    • )キャプチャ グループを閉じる
  • \b$単語の区切りと文字列の終わりが必要です。
于 2013-06-19T04:51:46.590 に答える
1

次のようなパターンが必要なようです。

^(1|[1-9]\d|100)\s+(1|[1-9]\d|[1-6]\d\d|7[0-5]\d)$

ただし、通常の整数比較で入力を検証する方がよいでしょう。

int int1, int2;
if (int.TryParse(param1, out int1) && int.TryParse(param2, out int2))
{
    if (int1 >= 1 && int1 <= 100 && int2 >= 1 && int2 <= 750)
    {
        ...
    }
}
于 2013-06-19T04:29:50.863 に答える
0

正規表現を使用しないことをお勧めしますが、次のようなものです。

int a=0,b=0;    
if(args.Length != 2){
  // not 2 arguments
}else{
   if(!int.TryParse(args[0], out a) || !int.TryParse(args[1], out b)){
      // not numbers
   }else{
      if(a < 1 || a > 100 || b < 1 || b > 750){
         // out of ranges
      }else{
         // everything fine
      }
   }
}

すぐそこに番号が表示されます。

于 2013-06-19T04:31:01.043 に答える
0

他の人が言ったように、正規表現は最良の選択肢ではありませんが、本当に使いたいのであれば、これはうまくいくようです...

^(?:100|[1-9]\d?) (?:[1-7](?:[0-4]\d|50)|[1-9]\d?)$
于 2013-06-19T04:51:35.683 に答える