2017-08-11 4 views
-1

正しい正規表現を作成できません。Java - Regex - 0-9、ピリオド、ハイフンを許可

有効:

  • 1.1.1
  • 1.1-1
  • 1から1.1
  • 1-1-1
  • 1-1
  • 1.1

無効:

  • 1..1
  • 1.
  • 1-1
  • の1-

これまでのところ、私はあなたの助け

+0

'([0-9] + [.-])* [0-9] [.-]?'(メソッド 'matches()'は完全一致、 '^ $'はそれらのために必要ではありません。) –

+0

例を挙げるだけでは不十分です。ルールを指定する必要があります。 – EJP

+0

@EJP彼は現在彼が使用している正規表現を書き留め、それは彼のためには機能しません。そのすべてはきれいにフォーマットされています。他に何を期待していますか?私はこれが初心者のための素敵な質問だと思う。 – GhostCat

答えて

4
ため

^[0-9]+[0-9.-][0-9]+$ 

おかげです

^[0-9]+[0-9.-][0-9]+$と一致するパターン1つ以上の数字([0-9]+)、数字、または.または-[0-9.-])と1つ以上の数字([0-9]+)のパターンと完全に一致する文字列を使用します。数字の文字列の中で連続する-または/および.に一致することができます。

あなたは.matches()方法でそれを使用する場合は、^$アンカーを省略することができるregex demo

を参照してください

^[0-9]+(?:[.-][0-9]+)*$ 

を使用することができます。

詳細

  • ^ - 文字列の先頭
  • [0-9]+から1以上だけ1回の発生と一致する必要がある場合(+数量詞は、1つの以上の出現と一致します+限定記号を削除する)
  • (?:[.-][0-9]+)* - 連続する0個以上の連続
    • [.-]のences - .又は-
    • [0-9]+から1桁以上(上記のように適用される同じ数量詞注)
  • $ - 文字列の末尾。ここ
0

この実行する必要があります。(ドット/マイナスの数字)の0回以上の繰り返しが続く

^[0-9]([.-][0-9])*$ 

1桁、他の回答に

0

わずかな変化を。 あなたはピリオドとハイフンなしで単独桁の場合を示すものではありませんでした:

  1. (無効) 1-(無効) 1(私はこの場合は無効であると仮定している)

また、この正規表現は、単一の数字(例:2.2.2、ない22.22.22)が

^\d([.-]\d)+$ 
0

両方

ことができます210

^[0-9]+(?:[.-][0-9]+)*$ 

作品。ありがとう

関連する問題