2014-09-01 9 views
5

sto usando VS2010 e codifica c applicazione console ++ e affrontato il problemaCosa c'è di sbagliato in regex_match? molto semplice espressione

#include <regex> 
using namespace std; 

//... 

if (!regex_match("abab",regex("(ab?)*"))) 
{ 
    //the problem is - why we are here? why it doesn't match? 
} 

controllato qui http://regexpal.com/ - corrisponda

+5

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. –

+0

@CaptainObvlious hai ragione !! Lo collaudo in VS2012, è così che la regex corrisponde per me. –

+0

[Funziona con gcc] (http://coliru.stacked-crooked.com/a/65f607082de2cc06). –

risposta

0

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.

Problemi correlati