Regex 括号中逗号分隔数字的正则表达式
我正在搜索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]*\}?当我们在结尾没有逗号时,它缺
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]+)*})$