Molto semplice: regex_match restituisce true solo se l'intera sequenza viene abbinato. Potresti voler usare regex_search se vuoi vedere se una stringa contiene la tua regex.
"ab?" corrisponde a "aba", il ripetitore ("() *") effettua questa corrispondenza una volta. Il resto è "b", quindi non è una corrispondenza completa.
Mi dispiace, ho letto male l'espressione regolare. Dovrebbe essere una partita completa. abbastanza strano:
regex_match("aab", regex("(ab?)*")) == true
sembra essere un bug all'interno del STL usato (testato con Qt Creator 2010.05, makespec = VS2010). Sostituire regex_match con regex_search nel codice corrisponde a destra, ma match_results è vuoto - indica che qualcosa va ancora storto.
Con VS2012 tutti i test sono stati corretti.
Molte implementazioni della libreria di espressioni regolari sono approssimative, in particolare in VS 2010. Tenere presente che VS 2010 è ** non ** un compilatore C++ 11, supporta semplicemente le funzionalità di _some_ C++ 11. –
@CaptainObvlious hai ragione !! Lo collaudo in VS2012, è così che la regex corrisponde per me. –
[Funziona con gcc] (http://coliru.stacked-crooked.com/a/65f607082de2cc06). –