Den her er lidt mere generel:
#include <iostream>
#include <cstdlib>
#include <regexx.hh>
using namespace std;
using namespace regexx;
int main (int argc, char ** argv)
{
Regexx regex;
if (argc == 1) {
cout << "Brug: " << argv[0] << " dato" << endl;
return 0;
}
try {
if (regex.exec(argv[1], "(\\\\\\\\d{1,2})/(\\\\\\\\d{1,2})/(\\\\\\\\d{2,4})")) {
cout << "Korrekt dato format" << endl;
int date = atoi(regex.match[0].atom[0].str().c_str());
int month = atoi(regex.match[0].atom[1].str().c_str());
int year = atoi(regex.match[0].atom[2].str().c_str());
cout << "Dato: " << date << endl;
cout << "Måned: " << month << endl;
cout << "År: " << year << endl;
} else {
cout << "Der er fejl i datoen" << endl;
}
} catch (Regexx::CompileException & e) {
cerr << e.message() << endl;
}
return 0;
}
Og så kan man efter at have trukket de enkelte dele af datoen ud også lave tjecks på deres størrelser. Det er lidt nemmere at gøre det i C/C++ end i regular expressions.
Her er et par tests:
robert@debian:~$ ./test 1/7/1999
Korrekt dato format
Dato: 1
Måned: 7
År: 1999
robert@debian:~$ ./test 01/07/1999
Korrekt dato format
Dato: 1
Måned: 7
År: 1999
robert@debian:~$ ./test 1/07/99
Korrekt dato format
Dato: 1
Måned: 7
År: 99
robert@debian:~$
Regexx biblioteket (som jeg bruger her) findes kun til Unix, men der findes sikkert lignende libs til Windows.