1. ホーム
  2. regex

[解決済み] 0より大きい数の正規表現?[クローズド]

2023-08-04 22:41:27

質問

正規表現を使って数値が0より大きいかどうかをチェックする方法を探しています。

例えば

  • 12 は真を返します
  • 0 は false を返します。

どのように解決するのですか?

MVCがどう関係するのかわかりませんが、IDが整数であれば、このBREでよいでしょう。

    ^[1-9][0-9]*$

整数ではなく実数(float)にマッチさせたい場合は、通常の10進数とともに、上記のようなケースを扱う必要があります(つまり 2.5 または 3.3̅ ), パターンが 0 と 1 の間の場合 (すなわち 0.25 のように)、また、パターンの小数点以下が0である場合(例. 2.0 ). さらに、整数の先頭のゼロのサポートも追加します (すなわち 005 ):

    ^(0*[1-9][0-9]*(\.[0-9]+)?|0+\.[0-9]*[1-9][0-9]*)$

この2つ目はExtended REであることに注意してください。 同じことをBasic REで表現することもできますが、最近はほとんどすべてのものがEREを理解しています。 この式を消化しやすい部分に分解してみましょう。

    ^(

キャレットは行頭の NULL にマッチするので、正規表現の前にキャレットを置くと行頭に固定されます。開始括弧があるのは、下にある「or-bar」のためです。これについては後で説明します。

      0*[1-9][0-9]*(\.[0-9]+)?

これは任意の整数 または 1 以上の浮動小数点数です。 2.0 はマッチングされますが 0.25 はマッチしません。 その 0* は先頭のゼロを処理するので 005 == 5 .

                              |

パイプ文字は"です。 またはバー であり、この文脈では "です。 この式の評価では、パイプ文字は他のすべての文字よりも優先順位が高く、2 つの正規表現を効果的に結合します。括弧は、or-bar で区切られた複数の式をグループ化するために使用されます。

そして、2番目の部分です。

                               0+\.[0-9]*[1-9][0-9]*

これは、1つまたは複数の 0 文字で始まる数字にマッチします。 +* でゼロまたはそれ以上のゼロにマッチします。 .25 ) の後にピリオドを置き、その後に少なくとも1つは 0 . つまり、これは上記のすべてにマッチします。 0 以下は 1 .

                                                    )$

そして最後に、括弧を閉じ、キャレットが行頭に固定されるように、ドル記号で正規表現を行末に固定します。

もちろん、プログラミング言語が何かを正規表現にマッチさせようとするのではなく、数値的に評価するようにすれば、頭痛の種である

CPU を節約できます。