Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 括号中逗号分隔数字的正则表达式_Regex_Bash - Fatal编程技术网

Regex 括号中逗号分隔数字的正则表达式

Regex 括号中逗号分隔数字的正则表达式,regex,bash,Regex,Bash,我正在搜索regex,它可以用于测试{}括号中的数字或逗号分隔的数字 34 {567} {12,13,14,30,101,23} 我有下面的正则表达式,它适用于前两个例子,但没有第三个 echo "{2424242,243,243,2,2,11}"|grep -E '^([1-9][0-9]*|\{[1-9][0-9]*\}|\{([1-9][0-9]*,)[1-9][0-9]*\})$' 什么是错误的:\{([1-9][0-9]*,)[1-9][0-9]*\}?当我们在结尾没有逗号时,它缺

我正在搜索regex,它可以用于测试{}括号中的数字或逗号分隔的数字

34
{567}
{12,13,14,30,101,23}
我有下面的正则表达式,它适用于前两个例子,但没有第三个

echo "{2424242,243,243,2,2,11}"|grep -E '^([1-9][0-9]*|\{[1-9][0-9]*\}|\{([1-9][0-9]*,)[1-9][0-9]*\})$'

什么是错误的:
\{([1-9][0-9]*,)[1-9][0-9]*\}

当我们在结尾没有逗号时,它缺少最后一个案例。这并不能解释重复。因此,在逗号后添加
,在内部捕获组
([1-9][0-9]*)+
后添加
+
解决了问题。这一行也与最后一行匹配:

^([1-9][0-9]*|\{[1-9][0-9]*\}|\{([1-9][0-9]*,?)+[1-9][0-9]*\})$
您可以看到

顺便说一句,它可以用更短的方式写,但我将留给您自己选择。

错误的是,您不寻找重复的逗号分隔的数字,您允许一个逗号,并限制数字以1到9开头(如果是有意的,请跳过此项)。我认为你必须这样做:

a=(34)
a+=( '{567}' )
a+=( '{12,13,14,30,101,23}' )

a+=( '{12,13,14,30,101,23' )
a+=( '12,13,14,30,101,23}' )
a+=( '12,13,14,30,101,23' )

regex='^([1-9][0-9]*|\{[1-9][0-9]*(,[1-9][0-9]*)*\})$'

for test in ${a[@]}; do
    grep -E "$regex" <<< "$test"
done

for test in ${a[@]}; do
    [[ $test =~ $regex ]] && echo ok : "$test"
done
^([0-9]+|{[0-9]+(,[0-9]+)*})$

错误的是,您不寻找重复的逗号分隔数字,而允许单个逗号和限制数字以
1
开头。我认为你必须这样做<代码> ^([09] + {{[09] +(,[09+])*<代码>如果一个解决方案适合你的问题,你应该考虑通过点击它旁边的复选标记来接受它。正如我看到你的问题,你以前从未这样做过。谢谢你,我已经做了这样的正则表达式thx到revo-它似乎也做得很好
^([1-9][0-9]*\{[1-9][0-9]*(,[1-9][0-9]*)*\\\\{[1-9][0-9]*\}$
btw。你指的是哪种更短的方式?我需要它来进行bash字符串测试
[[“${1}”=~hereregex].\124; |····································································{12,13,14,30101,23
12,13,14,30101,23}
12,13,14,30101,23
@Chris,这样更好?
^([0-9]+|{[0-9]+(,[0-9]+)*})$