2011-05-04 7 views
0

J'utilise regex en utilisant #include <regex.h> Si j'ai une chaîne s, comment puis-je utiliser regex pour rechercher un modèle p?Comment extraire des chaînes d'une chaîne C++ en utilisant regex

+0

qui regex.h? Le Unix? Vous devriez mieux le spécifier, puisqu'il ne s'agit pas d'un en-tête C++ ou C standard. –

+0

J'utilise juste celui qui est déjà là, donc le défaut, quel qu'il soit. Je suis dans OSX, qui est fondamentalement le même que Linux. – neuromancer

+0

Quel est votre compilateur et votre système d'exploitation? Quoi qu'il en soit, si vous voulez une compatibilité multiplate-forme et cross-compilateur et une bonne interface OO, je suggère d'essayer Boost.Regex. http://www.boost.org/doc/libs/1_46_1/libs/regex/doc/html/index.html –

Répondre

4
#include <regex.h> 
#include <iostream> 
#include <string> 

std::string 
match(const char *string, char *pattern) 
{ 

// Adapted from: 
    http://pubs.opengroup.org/onlinepubs/009695399/functions/regcomp.html 

    int status; 
    regex_t re; 
    regmatch_t rm; 


    if (regcomp(&re, pattern, REG_EXTENDED) != 0) { 
     return "Bad pattern"; 
    } 
    status = regexec(&re, string, 1, &rm, 0); 
    regfree(&re); 
    if (status != 0) { 
     return "No Match"; 
    } 
    return std::string(string+rm.rm_so, string+rm.rm_eo); 
} 

int main(int ac, char **av) { 
    // e.g. usage: ./program abcdefg 'c.*f' 
    std::cout << match(av[1], av[2]) << "\n"; 
} 
+0

Est-ce que cela fonctionne en studio visuel? – jjxtra

1

Vérifiez http://msdn.microsoft.com/en-us/library/bb982821.aspx, a détaillé le modèle d'utilisation pour regex. de MS vc blog.

 const regex r("[1-9]\\d*x[1-9]\\d*"); 

     for (string s; getline(cin, s);) { 
       cout << (regex_match(s, r) ? "Yes" : "No") << endl; 
     } 
+3

Qui détaille l'utilisation de ''. L'OP a demandé un exemple de ''. Ce ne sont pas les mêmes API. –

Questions connexes