Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec une regex

Problème avec une regex

Sujet résolu
Anonyme
    18 novembre 2018 à 14:29:11

    Bonjour :),

    J'ai pour projet de créer un langage ésotérique à pile, et je suis actuellement sur l'analyseur syntaxique :

    #include <iostream>
    #include <string>
    #include <fstream>
    #include <regex>
    #include "stack.h"
    
    int main(int argc, char** argv) {
    
    	Stack myStack; //définition de la pile
    
    	std::regex push { "[0-9]+" }; //regex d'un nombre à empiler
    
    	//lecture du fichier ligne par ligne
    	std::ifstream infile(argv[1]);
    	std::string line;
    	while(std::getline(infile, line)) {
    		if(std::regex_match(line, push)){ //si détection d'une valeur à empiler
    			myStack.push(/*nombre à empiler*/);
    		}
    	} 
    
    }

    La fonction main reçoit en paramètre le nom du fichier à analyser, qui est lu ligne par ligne, et si un nombre est détecté, il est empilé dans myStack via la fonction membre push(int x). 

    Par exemple, si une ligne contient : "abcdefg456hijklmnop", le nombre 456 va être empilé.

    J'arrive à détecter la présence d'un nombre via une regex, mais je ne sais pas comment le récupérer pour le passer en paramètre à ma fonction.

    myStack.push(/*nombre à empiler*/);

    Si quelqu'un sait comment faire ce serait très gentil de m'éclairer, merci :D


    • Partager sur Facebook
    • Partager sur Twitter
      18 novembre 2018 à 20:12:06

      Bonjour,

      Il faut utiliser search pour trouver plutôt que match.

        std::regex  push{"[0-9]+"};
        std::smatch match;
        std::string line = "abcdefg456hijklmnop";
        if ( std::regex_search( line , match , push ) ) {
            std::cout << match[0] << std::endl;  // afficher le 1er match
        }
      • Partager sur Facebook
      • Partager sur Twitter

      En recherche d'emploi.

      Anonyme

      Problème avec une regex

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown