32

100 以下の数値に一致させたいのですが、0 ~ 100 の範囲であれば何でもかまいませんが、正規表現は 120、130、150、999 などの 100 を超える数値には一致しません。

4

7 に答える 7

55

これを試して

\b(0*(?:[1-9][0-9]?|100))\b

説明

"
\b                # Assert position at a word boundary
(                 # Match the regular expression below and capture its match into backreference number 1
   0              # Match the character “0” literally
      *           # Between zero and unlimited times, as many times as possible, giving back as needed (greedy)
   (?:            # Match the regular expression below
                  # Match either the regular expression below (attempting the next alternative only if this one fails)
         [1-9]    # Match a single character in the range between “1” and “9”
         [0-9]    # Match a single character in the range between “0” and “9”
            ?     # Between zero and one times, as many times as possible, giving back as needed (greedy)
      |           # Or match regular expression number 2 below (the entire group fails if this one fails to match)
         100      # Match the characters “100” literally
   )
)
\b                # Assert position at a word boundary
"
于 2012-06-13T09:26:57.457 に答える
10

正規表現についてはどうですか?

^([0-9]|[1-9][0-9]|100)$

これは、例として7、82、100を検証しますが、07または082は検証しません。

番号範囲チェックの詳細(およびゼロプレフィックスを含むバリエーション)については、これを確認してください


浮動小数点数に対応する必要がある場合は、これを読む必要があります。使用できる式は次のとおりです。

浮動小数点:^[-+]?([0-9]|[1-9][0-9]|100)*\.?[0-9]+$

于 2012-06-13T09:20:54.277 に答える
4

(最終的に) 正規表現が必要な場合は、コード アサーションを使用します。

 /^(.+)$(??{$^N>=0 && $^N<=100 ? '':'^'})/

テスト:

my @nums = (-1, 0, 10, 22, 1e10, 1e-10, 99, 101, 1.001e2);

print join ',', grep 
                /^(.+)$(??{$^N>=0 && $^N<=100 ? '':'^'})/,
                @nums

結果:

 0,10,22,1e-010,99

(==>コードアサーションについて学ぶためのsth.はここにあります)。

于 2012-06-13T13:27:00.283 に答える
1

このための正規表現

perl -le 'for (qw/0 1 19 32.4 100 77 138 342.1/) { print "$_ is ", /^(?:100|\d\d?)$/ ? "valid input" : "invalid input"}'
于 2012-06-13T09:19:23.550 に答える
1

この正規表現は、0 ~ 100 の数字に一致し、001 のような数字は許可しません。

\b(0|[1-9][0-9]?|100)\b
于 2014-11-18T05:59:47.667 に答える