如何使用正则表达式验证破折号分隔值?

时间:2014-10-31 13:40:52

标签: java regex

我有一个带数字和分隔符的字符串。 数字可以由commahyphen分隔。但是,可能永远不会有两个数字都用连字符分隔,而中间没有逗号。

示例:

有效:123,12,2,1-3,1,1-3,1

无效:123,12,2,1-3,1,1-3-5,1

我有一个几乎有效的正则表达式,除了它没有检测到那些1-3-5个无效行。

如何改进以下内容?

^([0-9])+((,|-)[0-9]+)*$

3 个答案:

答案 0 :(得分:2)

这是一个解决方案:

^(?:\d+(?:-\d+)?(?:,|$))+$

Demo

说明:匹配一个数字,可选地后跟一个破折号和另一个数字,然后匹配逗号或字符串的结尾。并重复一遍。

答案 1 :(得分:1)

您可以分解输入:

  • normal:一个或多个数字,可选地后跟一个破折号,然后是一个或多个数字;
  • special:逗号。

正常情况的正则表达式可写为\d+(?:-\d+)?;对于特殊情况,这只是,

应用normal* (special normal*)*模式,添加锚点和量词,我们有:

^\d+(?:-\d+)?(,\d+(?:-\d+)?)*$

答案 2 :(得分:1)

您可以使用环视添加条件,这将搜索-digits-,因此您的正则表达式可能如下所示:

^(?!.*-\\d+-)[0-9]+([,-][0-9]+)*$
 ^^^^^^^^^^^^-negative look-ahead, match will fail if there is any -digits- in your string