我正在搜索可用于测试 {} 括号中的数字或逗号分隔数字的正则表达式
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]*\})$
您可以看到live version here
顺便说一句,它可以写得更短,但我会把它留给你的喜好。
关于括号中逗号分隔数字的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49709443/