0

次の制約を持つ数値を検証するために、Java で正規表現を作成しようとしています。

  1. 数字は任意の長さにできますが、数字のみを含めることができます
  2. 最初の桁は 0 ~ 9 です
  3. 後続の数字は 0 から 9 にすることができますが、数字の 1 つは非ゼロでなければなりません。

例:042004359は有効ですが、そうで0000000000はありません。

4

4 に答える 4

3

\\d+[1-9]\\d* should work, I'd think.

于 2012-08-13T21:46:43.857 に答える
1

これはあなたが必要とすることをするはずです:

/^(?=.*[1-9])([0-9]+)$/

すべての数字[0-9]に一致しますが、 [1-9]の少なくとも 1 つがあることを確認する先読みが含まれています。

Java allow が先読みを使用できることはかなり確信しています。

EDIT : この正規表現テスト ページは、それが可能であることを暗示しているようです。

編集: 0が有効な場合は、これを使用できます。

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

これは、単独で0の例外を作成します(OR 演算子に注意してください)。

于 2012-08-13T22:22:28.653 に答える
0

ルックアラウンドを使用した解決策の 1 つを次に示します。(?<=\D|^)\d+(?=[1-9])\d*

(?<=\D|^)   # lookbehind for non-digit or beginning of line
\d+         # match any number of digits 0-9
(?=[1-9])   # but lookahead to make sure there is 1-9
\d*         # then match all subsequent digits, once the lookahead is satisfied
于 2012-08-13T22:33:52.480 に答える
0
^(\d{1})(\d*?[1-9]{1}\d*)*$

^(\d{1}) - 行は 1 桁で開始する必要があり
ます (\d*?[1-9]{1}\d*)*$ - 行は 0 個以上の 0-9 桁で終了する必要があります (保守的な場合は? )、次に 1 から 9 の数字、次にゼロ以上の数字。このパターンは、0 回以上繰り返すことができます。

で動作します:

100000
100100
1010200
1
2

たぶん、これは難しすぎる(笑)。

于 2012-08-13T22:17:55.550 に答える