2016-09-18 4 views
1

Я довольно новичок, чтобы увеличить библиотеку регулярных выражений. Следующий пример кода используется для проверки того, соответствует ли введенная дата формату YYYY-MM-DD. Однако в регулярном выражении, похоже, есть ошибка. Он всегда возвращает false. *C++ boost regex date error

  • Я бегу консольного приложения на окнах.

* регулярное выражение было взято из here

bool regexValidate(string teststring) 
{ 
boost::regex ex("^(20\\d{2})(\\d{2})(\\d{2})"); 
if (boost::regex_match(teststring, ex)) { 
    cout << "true"; 
    return true; 
} 
else { 
    return false; 
} 
} 
int main() 
{ 


string teststr = "2016-05-15"; 


cout << teststr << " is "; 
if (regexValidate(teststr)) { 
    cout << " valid!" << endl; 
} 
else { 
    cout << " invalid!" << endl; 
} 

system("PAUSE"); 
return 0; 
} 

ответ

1

Вы почти там; просто добавить дефис в своем регулярном выражении:

"^(20\\d{2})-(\\d{2})-(\\d{2})" 

Кстати, это не будет анализировать даты до 2000 года или после 2099. И нет никакого явного конца из-строки ($) в конце. Что-то подобное:

"^(\\d{4})-(\\d{2})-(\\d{2})$" 

... Я думаю, что должно сделать вас хорошо где-нибудь в последние столетия ;-)

+0

Спасибо! работает штраф должен включать конец строки ($) – unprogram14