2010-12-10 13 views
0

Ich habe eine Zeichenfolge, die "/" "+" "sein kann." oder ein beschreibender NameVerwenden Boost :: Xpressive, um ein einzelnes Zeichen

Ich versuche, herauszufinden, wie Regex zu verwenden, um zu überprüfen, ob die Zeichenfolge entspricht einen der drei Sonderzeichen oben (/ + oder.)

Nach einem bisschen Lesung tun i beschlossen Boost :: Xpressive war der Weg zu gehen, aber ich kann es immer noch nicht herausfinden.

ist Boost: xpressive für diese Aufgabe geeignet und was würde meine Regex-Zeichenfolge sein?

dank

Antwort

2

Warum std::string::find_first_of() gerade nicht benutzen, um Ihre eigene Lösung zu tun? Klingt wie eine Menge Maschinen für eine ziemlich einfache Aufgabe.

bearbeiten

dies ausprobieren, wenn Sie noch nicht weiterkommen.

#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; 
} 

Es gibt zwei Möglichkeiten gezeigt, um die gleiche Sache zu tun. Die Variable mit dem Namen re wird mit einer Perl-artigen regulären Ausdruckszeichenfolge initialisiert. rex verwendet native Xpressive-Elemente.

+0

Ich versuche, über Regex zu lernen, und ich konnte die Lösung für die obige Frage nicht finden. Ich denke es waren die entflohenen Charaktere die mich verwirrten. – hipyhop

+1

@TomFLuff: Nun, das ist anders. Reguläre Ausdrücke sind sehr mächtige Werkzeuge, also gräbt euch weiter ein. Denken Sie daran, eine Lösung nicht übermäßig zu komplizieren, um etwas Cooles zu verwenden (ich muss mich ständig daran erinnern). – gregg

1

Ich würde sagen, dass Boost.Xpressive für die Aufgabe übertrieben sein kann, aber es ist Ihr Anruf.

Regulärer Ausdruck sind Lebensretter, wenn Sie eine besonders formatierte Zeichenfolge validieren möchten. Hier gibt es kein Format, nur eine Menge möglicher Werte. Mein Rat: Wenn Ihr Problem durch einfache, aufeinander folgende Zeichenfolgen Gleichheit Vergleiche gelöst werden kann, dann brauchen Sie wahrscheinlich nichts wie reguläre Ausdrücke.

Verwandte Themen