我需要这个
的正则表达式然后是任何数字。再次数和。
所以这是有效的
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);
}
答案 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])
否定性的解决方法是避免匹配.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