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

标签 regex bash

我正在搜索可用于测试 {} 括号中的数字或逗号分隔数字的正则表达式

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/

相关文章:

python - 如何在python中的正则表达式搜索函数中使用变量而不是字符串

javascript - 正则表达式解析括号中的值

ruby-on-rails - 在 ruby​​ 中使用 .split 拆分 unicode(我认为)

php - 正则表达式查找小于和大于等号之间的文本

linux - 在 Shell 中识别包含路径(包括 * 星号)的文件中的文本

c++ - 在 C++ 中重定向 bash stdin 和 stdout

bash - 如何遍历字典列表并根据 Bash 中的键对输出进行排序?

javascript - 从一行字符串中提取价格的最佳方法是什么?

linux - Bash 脚本,用于循环打开和关闭无线接口(interface)

string - 我如何回应 "-e"?