次の制約を持つ数値を検証するために、Java で正規表現を作成しようとしています。
- 数字は任意の長さにできますが、数字のみを含めることができます
- 最初の桁は 0 ~ 9 です
- 後続の数字は 0 から 9 にすることができますが、数字の 1 つは非ゼロでなければなりません。
例:042004359
は有効ですが、そうで0000000000
はありません。
\\d+[1-9]\\d*
should work, I'd think.
これはあなたが必要とすることをするはずです:
/^(?=.*[1-9])([0-9]+)$/
すべての数字[0-9]に一致しますが、 [1-9]の少なくとも 1 つがあることを確認する先読みが含まれています。
Java allow が先読みを使用できることはかなり確信しています。
EDIT : この正規表現テスト ページは、それが可能であることを暗示しているようです。
編集: 0が有効な場合は、これを使用できます。
^((?=.*[1-9])([0-9]+)|0)$
これは、単独で0の例外を作成します(OR 演算子に注意してください)。
ルックアラウンドを使用した解決策の 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
^(\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
たぶん、これは難しすぎる(笑)。