Questo è un bug nell'implementazione di libstdC++. Guarda questi:
#include <string>
#include <regex>
#include <boost/regex.hpp>
#include <iostream>
int main() {
{
using namespace std;
regex my_r("(.*)(6)(.*)");
smatch m;
if (regex_match(std::string{"123456789"}, m, my_r)) {
std::cout << m.length(1) << ", "
<< m.length(2) << ", "
<< m.length(3) << std::endl;
}
}
{
using namespace boost;
regex my_r("(.*)(6)(.*)");
smatch m;
if (regex_match(std::string{"123456789"}, m, my_r)) {
std::cout << m.length(1) << ", "
<< m.length(2) << ", "
<< m.length(3) << std::endl;
}
}
return 0;
}
Se si compila con gcc, il primo (libstdC++) restituisce il risultato del tutto sbagliato 9, -2, 4 e la seconda (implementazione del boost) restituisce 5, 1, 3 come previsto.
Se si compila con clang + libC++, il codice funziona correttamente.
(Si noti che libstdC++ s 'regex attuazione è solo "parzialmente supportato", come descritto in http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52719.)
nota che il supporto per l'implementazione di espressioni regolari è ancora molto basso su gcc e MSVC probabilmente anche. – inf
grazie, sto usando gcc 4.6.3. –
Ho aggiornato a g ++ 4.7, ma ho ancora lo stesso output. Continuo a pensare che questo sia un fraintendimento delle regex da parte mia. Troppo spesso ho incolpato il software per i miei errori in passato. –