Bardzo prosta: regex_match zwraca tylko prawdziwe, jeśli cała sekwencja zostanie dopasowane. Możesz użyć regex_search, jeśli chcesz sprawdzić, czy łańcuch zawiera twoje wyrażenie regularne.
"ab?" pasuje do "aba", repeater ("() *") sprawiają, że ten mecz raz. Pozostała część to "b", więc nie jest to pełna zgodność.
Przykro mi, źle odczytałem wyrażenie regularne. Powinien to być pełny mecz. tyle dziwne:
regex_match("aab", regex("(ab?)*")) == true
Wydaje się, że błąd w STL (stosowanego badanego QT Twórcy 2010.05, makespec = VS2010). Zastępowanie regex_match przez regex_search w twoim kodzie pasuje do prawej, ale wyniki match_ są puste - co oznacza, że coś jest nie tak.
Z VS2012 wszystkie testy zostały poprawnie dopasowane.
Wiele implementacji biblioteki wyrażeń regularnych ma charakter szkicowy, szczególnie w VS 2010. Należy pamiętać, że VS 2010 to ** nie ** kompilator C++ 11, po prostu obsługuje funkcje _some_ C++ 11. –
@CaptainObvlious masz rację !! Testuję to w VS2012, w ten sposób regex pasuje do mnie. –
[Działa z gcc] (http://coliru.stacked-crooked.com/a/65f607082de2cc06). –