Несколько строк времени с использованием регулярного выраженияC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Несколько строк времени с использованием регулярного выражения

Сообщение Anonymous »

У меня есть возможность вводить несколько форматов строк времени, которые необходимо проверить. Я пробовал регулярное выражение, но существует много разных форматов. Есть ли лучший способ сделать это? Форматы указаны ниже.
ЧЧ:ММ:СС
Ч:ММ:СС
Ч:М:СС
Ч:ММ:С
Ч:М:С
ЧЧ:М:СС
ЧЧ:М:С
ЧЧ:ММ:С
Это код I пробовал.

Код: Выделить всё

bool Common::isValidTime ( int32_t id, std::string timeStr )
{
const std::regex pattern ( "^\d{1,2}:\d{1,2}:\d{1,2}$" ); // pattern for HH:MM:SS
const std::regex pattern1 ( "^([0-9]):([0-5][0-9]):([0-5][0-9])$" );     // pattern for H:MM:SS
const std::regex pattern2 ( "^([0-2][0-9]):([0-9]):([0-5][0-9])$" );     // pattern for H:M:SS
const std::regex pattern3 ( "^([0-9]):([0-9]):([0-9])$" );              // pattern for H:M:S
const std::regex cPattern ( "^([0-5][0-9]).([0-9])$" );                  // pattern for XX.X
const std::regex cPattern_1 ( "^([0-9]).([0-9])$" );                     // pattern for X.X

switch( id )
{
case ID_KT_ACT: case ID_ALCSLK_ACT: case ID_ALCSHO_ACT:
case ID_KT_ACT_7: case ID_ALCSLK_ACT_7: case ID_ALCSHO_ACT_7:
// Matches the format of data entry
return std::regex_match ( timeStr, pattern ) ||
std::regex_match ( timeStr, pattern1 ) ||
std::regex_match ( timeStr, pattern2 ) ||
std::regex_match ( timeStr, pattern3 );
break;
case ID_COOP1_ACT: case ID_COOP2_ACT:
case ID_COOP1_ACT_7: case ID_COOP2_ACT_7:
// Matches the format of data entry
return std::regex_match ( timeStr, cPattern ) ||
( std::regex_match ( timeStr, cPattern_1 ) );
break;
}
}
Входная строка — 03:15:30, но может быть 3:5:2 или что-то среднее между ними.
Я не указывал во всех шаблонах, потому что шаблон1, шаблон2 и шаблон3 тоже не работают.

Подробнее здесь: https://stackoverflow.com/questions/791 ... sing-regex
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»