2010-12-10 8 views
0

J'ai une chaîne qui peut être "/" "+" "." ou un nom descriptifUtiliser Boost :: Xpressive pour faire correspondre un seul caractère

J'essaie de comprendre comment utiliser regex pour vérifier si la chaîne correspond à l'un des 3 caractères spéciaux ci-dessus (/ + ou.)

Après avoir fait un peu de lecture i décidé boost :: xpressive était le chemin à parcourir mais je n'arrive toujours pas à le comprendre.

est Boost: xpressive adapté à cette tâche et quelle devrait être ma chaîne regex?

grâce

Répondre

2

Pourquoi ne pas simplement utiliser std::string::find_first_of() pour faire votre propre solution? Cela ressemble à beaucoup de machines pour une tâche assez simple.

Modifier

Essayez ceci si vous êtes toujours bloqué.

#include <iostream> 
#include <boost/xpressive/xpressive.hpp> 

using namespace std; 
using namespace boost::xpressive; 

int main() 
{ 
    sregex re = sregex::compile("[+./]|[:word:]+"); 

    sregex op = as_xpr('+') | '.' | '/'; 
    sregex rex = op | (+alpha); 

    if (regex_match(string("word"), re)) 
     cout << "word" << endl; 
    if (regex_match(string("word2"), re)) 
     cout << "word2" << endl; 
    if (regex_match(string("+"), re)) 
     cout << "+" << endl; 
    return 0; 
} 

Il existe deux façons de faire la même chose. La variable nommée re est initialisée avec une chaîne d'expression régulière de type perl. rex utilise des éléments natifs Xpressive.

+0

J'essaie d'apprendre à propos de regex et je ne pouvais pas trouver la solution à la question ci-dessus. Je pense que c'était les personnages évadés l'un à côté de l'autre qui me confondaient. – hipyhop

+1

@TomFLuff: Eh bien, c'est différent. Les expressions régulières sont des outils très puissants, alors continuez à les explorer. Gardez juste à l'esprit de ne pas trop compliquer une solution pour utiliser quelque chose de cool (je dois constamment me rappeler de cela). – gregg

1

Je dirais que Boost.Xpressive peut être trop lourd pour la tâche, mais c'est votre appel.

L'expression régulière permet de sauver des vies lorsque vous souhaitez valider une chaîne particulièrement formatée. Ici, il n'y a pas de format impliqué, seulement un ensemble de valeurs possibles. Mon conseil: si votre problème peut être résolu par de simples comparaisons de chaînes égalité, vous n'avez probablement besoin d'aucune expression régulière.

Questions connexes