Vous n'avez spécifié aucune capture dans votre expression.
Compte tenu de la structure de /proc/cpuinfo
, je serais probablement préfère une ligne les entrées, en utilisant std::getline
, plutôt que d'essayer de le faire tout à la fois. Donc, vous finirez avec quelque chose comme:
std::string line;
while (std::getline(input, line)) {
static std::regex const procInfo("model name\\s*: (.*)");
std::cmatch results;
if (std::regex_match(line, results, procInfo)) {
std::cout << "???" << " " << results[1] << std::endl;
}
}
Ce n'est pas clair pour moi ce que vous vouliez en sortie. Probablement, vous devez également capturer la ligne processor
et afficher le début de la ligne d'information du processeur au .
Les choses importantes sont à noter:
Vous devez accepter des quantités variables d'espace blanc: utiliser "\\s*"
0 ou plus, "\\s+"
pour un ou plusieurs espaces.
Vous devez utiliser des parenthèses pour délimiter ce que vous voulez capturer.
(FWIW: Je fonde en fait mes déclarations sur boost::regex
, puisque je ne ai pas accès à std::regex
Je pense qu'ils sont assez similaires, cependant, et que mes déclarations à appliquer au-dessus. les deux.)
Vous ne voulez pas dire 'cmatch'? Pouvez-vous s'il vous plaît poster tout le code et le contenu de 'cpuinfo'? – slaphappy
Voir ce sujet "Différence entre regex_match et regex_search?" (http://stackoverflow.com/questions/11628047/difference-between-regex-match-and-regex-search) – SChepurin
Vous voulez ajouter que cela fonctionne dans VC++ 2010 avec une expression corrigée par James Kanze dans la réponse ci-dessous. – SChepurin