可能的输入:" vlan1-6,8,10,11-16,20 " 验证子串" 1-6,8,10,11-16,20 "有没有可能常规 表达或者我需要编写传统的if-else条件。
字符串标记将类似于:如果第一个标记是数字,则连字符或逗号应该出现,连字符后应该出现更大的数字,然后如果不结束,则必须出现逗号,然后任何单个数字将出现或任何带连字符的范围都将到来。
Example, Check should be like,
2-4,7,9,13-16 => Correct
1,2,3,4-8,10,11,12-14 => Correct
1,,2-3 => Wrong
-2,3,5-8 => Wrong
2--3,6,9 => Wrong
2-3-6,9,10-12 => Wrong
2-3-6,9,10-- => Wrong
答案 0 :(得分:0)
您可以检查字符串是否具有逗号分隔数字的模式,并带有可选的1个虚线额外数字。
例如:
std::string s ("4,7,9,13-16");
if (std::regex_match (s, std::regex("^[0-9]+(?:-[0-9]+)?(?:,[0-9]+(?:-[0-9]+)?)*$")))
{ std::cout << "valid\n"; }
else
{ std::cout << "not valid\n"; }
但您不能仅使用正则表达式来验证该列表中的数字是否也是连续的。