6

これには正規表現が必要です

その後、任意の数。そして再び番号と。

だからこれは有効です

1.3.164.1.2583.15.46
546.598.856.1.68.268.695.5955565

しかし

5..........
...56.5656

無効です

私は次のようなパターンを試しました:

pattern = "[0-9](\\.[0-9]?*)?*";
pattern = "[0-9](\\.[0-9]?*)?$";
pattern = "[^0-9\\.]";

しかし、これらのどれも私の要件を満たしていません。助けてください?

私の既存のコードは

String PATTERN="\\d+(\\.\\d+)*";
@Override
public void insertString(int arg0, String arg1, AttributeSet arg2)
{

    if(!arg1.matches(this.PATTERN))
        return;

    super.insertString(arg0, arg1, arg2);
}
4

4 に答える 4

9

このようなものが機能するはずです:

(\\d+\\.?)+

編集

はい、ファイナルが許可されているかどうかは説明から明らかではありません.(最初のファイナルが許可されていないと仮定します)。

そうでない場合:

(\\d+\\.?)*\\d+ または \\d+(\\.\\d+)*(それがより論理的であると思われる場合)

テスト

for (String test : asList("1.3.164.1.2583.15.46",
    "546.598.856.1.68.268.695.5955565", "5..........", "...56.5656"))
    System.out.println(test.matches("\\d+(\\.\\d+)*"));

生成:

true
true
false
false
于 2012-11-02T05:15:43.740 に答える
0

私はここで再帰的な正規表現を考えていました、そして私のパターンは次のとおりです:

pattern = "\\d+.\\d+(?:.\\d+.\\d+)*"
于 2012-11-02T05:20:43.140 に答える
0

これ [0-9]+([.][0-9]+)* equivalent to \\d+([.]\\d+)*は有効です

1.3.164.1.2583.15.46、546.598.856.1.68.268.695.5955565および5465988561682686955955565 _ _

そしてこれ [0-9]+([.][0-9]+)+ equivalent to \\d+([.]\\d+)+は有効です

1.3.164.1.2583.15.46および546.598.856.1.68.268.695.5955565です、 5465988561682686955955565ではありません

于 2016-10-24T06:46:45.587 に答える
0

次の正規表現と一致させることができます。

(?<![.\d])\d+(?:\.\d+)+(?![.\d])

エンジンを始動してください!

ネガティブな回避策は、との一致を避けること.1.3.164.1です1.3.164.1.。ルックアラウンドに含める\dことは、での一致を避けること1.3.16です1.3.164.1.

Javaの正規表現エンジンは次の操作を実行します。

(?<![.\d])  : negative lookbehind asserts following character is not
              preceded by a '.' or digit
\d+         : match 1+ digits
(?:\.\d+)   : match '.' then 1+ digits in a non-capture group
+           : match the non-capture group 1+ times
(?![.\d])   : negative lookahead asserts preceding character is not
              followed by a '.' or digit
于 2020-06-29T19:31:40.340 に答える