我有一个带有数字和分隔符的字符串。这些数字可以用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]+)*$发布于 2014-10-31 21:45:17
你可以分解你的输入:
正常情况下的正则表达式可以编写为\d+(?:-\d+)?;对于特殊情况,可以简单地将其编写为,。
应用normal* (special normal*)*模式,并添加锚点和量词,我们得到:
^\d+(?:-\d+)?(,\d+(?:-\d+)?)*$发布于 2014-10-31 21:46:05
这里有一个解决方案:
^(?:\d+(?:-\d+)?(?:,|$))+$Demo
说明:匹配一个数字,后面可以跟一个破折号和另一个数字,然后匹配逗号或字符串的结尾。再重复一遍。
发布于 2014-10-31 21:46:45
您可以使用look-around添加条件,这将搜索-digits-,这样您的正则表达式就可以如下所示:
^(?!.*-\\d+-)[0-9]+([,-][0-9]+)*$
^^^^^^^^^^^^-negative look-ahead, match will fail if there is any -digits- in your stringhttps://stackoverflow.com/questions/26676101
复制相似问题