2017-08-11 27 views
-1

我无法构建正确的正则表达式。Java - 正则表达式 - 允许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-9]+[0-9.-][0-9]+$ 

感谢您的帮助

+0

尝试像这样:'([0-9] + [.-])* [0-9] [.-]?'(Methods' matches()'do full match,'^ $'are对他们来说不是必需的。) –

+0

举例是不够的。你必须指定你的规则。 – EJP

+0

@EJP他放下了他正在使用的正则表达式,这对他不起作用。所有这些都很好地格式化。你还有什么期望呢?我认为这对于新手来说是个不错的问题。 – GhostCat

回答

4

^[0-9]+[0-9.-][0-9]+$模式匹配为与1个或多个数字([0-9]+),一个数字或.-[0-9.-])以及一个或多个数字([0-9]+)完全匹配。它可以匹配连续的-或/和.内的一串数字。

您可以使用

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

regex demo

如果在.matches()方法使用它时,^$锚可以省略。

详细

  • ^ - 字符串的开始
  • [0-9]+ - 1以上(+量词匹配1次或多次出现,如果你只需要匹配一个单次发生删除+量词)数字
  • (?:[.-][0-9]+)* - 零或更多连续的sequ的
    • [.-]分配办法 - 一个.-
    • [0-9]+ - 1或多个数字(同样的量词音符如上适用)
  • $ - 字符串的结尾。
0

在这里,这应该做的:

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

一个数字,后跟零所或多个出现的(点/减位)其他答案

0

稍有不同。 你没有表明一个孤独的数字的情况下,无期和连字符:

  1. (无效) 1-(无效) 1(我假设这种情况下是无效的)

而且这正则表达式只允许单个数字(例如2.2.2,不22.22.22)

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

两个

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

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

作品。谢谢