2017-07-18 62 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

您可以檢查字符串是否有逗號分隔數字模式,並帶有可選的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"; } 

但是你不能僅使用正則表達式來驗證數字是否也是在該列表中的順序。