2017-07-18 3 views
-4

可能な入力:「vlan1-6,8,10,11-16,20」部分文字列を検証するために "1-6,8 、10,11-16,20 "は可能ですか普通 式です。伝統的なif-else条件を記述する必要があります。最初のトークンが数値である場合は、ハイフンやカンマが来るはずですし、その後、終了していない任意の単一の数が来るか、任意のハイフン付き範囲の意志になる場合は、ハイフンの後に大きな数は来るべきで、その後、コンマが来なければならない:は、以下の条件のためのC++で正規表現による文字列を検証する必要があります。

文字列トークンは次のようになります来る。

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

「より大きい数値」は非常に難しく、正規表現では判読できません。 – Yunnosch

答えて

0

文字列にカンマ区切りのパターンとオプションの破線の余分な数字があるかどうかを確認できます。例えば

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

しかし、あなたは数字にもそのリストで連続しているかどうかを検証するためにのみ、正規表現を使用することはできません。

関連する問題