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.59555655465988561682686955955565 _ _

这个 [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.11.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 回答