需要在c ++中通过正则表达式验证字符串,以满足以下条件:

时间:2017-07-18 08:40:33

标签: c++ regex

可能的输入:" 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

1 个答案:

答案 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"; }

但您不能仅使用正则表达式来验证该列表中的数字是否也是连续的。