带点的数字的正则表达式

时间:2012-11-02 05:12:57

标签: java regex

我需要这个

的正则表达式

然后是任何数字。再次数和。

所以这是有效的

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 个答案:

答案 0 :(得分:5)

这样的事情应该有效:

(\\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

答案 1 :(得分:0)

我在这里考虑递归正则表达式,我的模式是:

pattern = "\\d+.\\d+(?:.\\d+.\\d+)*"

答案 2 :(得分:0)

这一个 <{1}}对

有效
  

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

答案 3 :(得分:0)

您可以匹配以下正则表达式。

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

Start your engine!

否定性的解决方法是避免匹配.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