Если у вас есть C ++ 11, следующий синтаксический анализатор (AX) проанализирует все ваши форматы (я его не тестировал):
unsigned i;
auto num = axe::r_unsigned(i);
auto space = axe::r_any(" \t");
auto format1 = num % (*space & ',' & *space) & ~("and" & +space & num);
auto format2 = num & +space & "through" & +space & num;
auto format3 = num & +space & "to" & +space & num;
auto format4 = num & +space & "or" & +space & num;
auto format = "items" & +space & (format1 | format2 | format3 | format4);
Если у вас нет C ++ 11, вы можете написать похожий парсер на C ++, используя boost :: spirit . Писать и отлаживать такой анализатор проще и короче, чем с помощью регулярных выражений, а также вы получаете большую гибкость при создании правил синтаксического анализа и семантических действий.