我有一个数字和分隔符的字符串。 这些数字可以用comma
或hyphen
分开。但可能永远不会有两个数字,它们之间用逗号分隔,而没有逗号。如何使用正则表达式验证破折号分隔值?
例子:
有效: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]+)*$
我有一个数字和分隔符的字符串。 这些数字可以用comma
或hyphen
分开。但可能永远不会有两个数字,它们之间用逗号分隔,而没有逗号。如何使用正则表达式验证破折号分隔值?
例子:
有效: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]+)*$
你可以分解你的输入:
正常情况下的正则表达式可以写为\d+(?:-\d+)?
;对于特殊情况,这只是,
。
运用normal* (special normal*)*
模式,并添加锚和量词,我们有:
^\d+(?:-\d+)?(,\d+(?:-\d+)?)*$
可以使用环视这将搜索-digits-
让你的正则表达式可以像添加条件:
^(?!.*-\\d+-)[0-9]+([,-][0-9]+)*$
^^^^^^^^^^^^-negative look-ahead, match will fail if there is any -digits- in your string
它不工作http://regex101.com/r/gO7yT8/2 – 2014-10-31 22:44:23
@ alphabravo使用'\ d'而不是'\\ d'。在Java中,'''''也需要在String中转义,所以我这样写了。 – Pshemo 2014-10-31 22:47:51
我明白了,你还必须添加'^'锚。 – 2014-10-31 22:50:07