正则表达式帮助,连续只有一个连字符?

时间:2013-02-13 11:59:37

标签: regex

我想接受0-9 ,-

所以我有:

[0-9-,]+

但是我只希望连续一个-,所以你不能拥有--。我怎么能这样做?

3 个答案:

答案 0 :(得分:2)

使用lookahead assertion

(?!.*--)[0-9,-]+

此外,您可能需要使用anchors来确保整个字符串匹配:

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

答案 1 :(得分:2)

我认为必须要的是:

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

这是做什么的:

\d+任何整数(一位或多位数)

(-\d+)?可选部分匹配-后跟整数

(,\d+(-\d+)?)*零次或多次出现,,然后组合上述模式。

注意:\

添加所需的转义功能

答案 2 :(得分:0)

这样可以吗?

^[0-9,]*-?[0-9,]*$

用grep做了一个小测试:

kent$  echo "1-234-
1234-
3-24442-34
12341234"|grep -E '^[0-9,]*-?[0-9,]*$'
1234-
12341234