In der regex Implementierung von VS-2010 ist ein relativ fataler Bug drin, der auftritt, wenn man Repetitions (Wiederholungen, {n}) verwendet.
Wie zum Beispiel hier in diesem Beispiel.
#include <stdio.h>
#include <ios>
#include <iostream>
#include <ostream>
#include <regex>
#include <string>
using namespace std;
void test(const string& s, const string& reg)
{
cout << "---------------" << endl;
cout << "s: " << s << endl;
cout << "r: " << reg << endl;
const regex r(reg);
cout << boolalpha << regex_match(s, r) << endl;
}
int main()
{
printf("%02d.%02d.%05d.%02d\n",
_MSC_VER / 100,
_MSC_VER % 100,
_MSC_FULL_VER % 100000,
_MSC_BUILD);
test("56." , "(([0-9]{1,2})\\.){1}");
test("1." , "(([0-9]{1,2})\\.){1}");
test("56.1.", "(([0-9]{1,2})\\.){2}");
}
Der erste und zweite Ausdruck führt zu einem Match. Der dritte Ausdruck ist eigentlich nur der kombinierte Test, der beide Ausdrücke in einem testet.
Der Fehler wird auch in SP1 nicht gefixed sein.
Meine Tests ergaben, dass in VS-2008 SP1 bei der das ganze tr1-Zeugs in VisualStudio Einzug genommen hat, noch alles korrekt funktioniert hat.
Nachtrag (07.03.2010): Es gibt auch einen entsprechenden Bug auf Connect:
https://connect.microsoft.com/VisualStudio/feedback/details/648543/tr1-regex-doesnt-match-a-valid-pattern-with-repetition#tabs