2009-07-27 14 views
0

Ich suche nach einem regulären Ausdruck (oder etwas anderes) Bibliothek für C++, die es mir erlauben würde, eine Anzahl von Mustern anzugeben, auf einer Zeichenfolge auszuführen und die übereinstimmenden Positionen aller Muster zurückzugeben.Bibliothek für reguläre Ausdrücke, die alle Übereinstimmungen für mehrere Muster in einem Durchgang für C++ zurückgibt?

Zum Beispiel: Patterns { "ABCD", "ABCD"} String { "abcd abce abcd"}

Ergebnis: abcd Spiele: 0-3, 11-14 abce Spiele: 5- 9

Wer weiß von solch einer Bibliothek?

Antwort

2

Ich empfehle boost :: Xpressive http://www.boost.org/doc/libs/1_39_0/doc/html/xpressive.html.

Eine mögliche Lösung:

string text = "abcd abce abcd"; 

static const sregex abcd = as_xpr("abcd"); // static - faster 
sregex abce = sregex::compile("abce") // compiled 
sregex all = *(keep(abcd) | keep(abce)); 

smatch what; 

if(regex_match(text, what, all)) 
{ 
    smatch::nested_results_type::const_iterator begin = what.nested_results().begin(); 
    smatch::nested_results_type::const_iterator end = what.nested_results().end(); 

    for(;it != end; it++) 
    { 
     if(it->regex_id() == abcd.regex_id()) 
     { 
      // you match abcd 
      // use it->begin() and it->end() 
      // or it->position() and it->length() 
      continue; 
     } 
     if(it->regex_id() == abce.regex_id()) 
     { 
      // you match abcd... 
      continue; 
     }; 

} 

Ich denke, ist nicht beste Lösung, könnten Sie „Semantic Aktionen und benutzerdefinierte Assertions“ in der Dokumentation überprüfen.

0

Reguläre Ausdrücke sind Teil der Standarderweiterung TR1 und in einer Reihe von Standardbibliotheken implementiert (d dinkumware)

Ich denke, dass seine sehr einfach den umliegenden Code selbst zu schreiben.

0

Funktioniert es nicht mit einem einfachen oder?

"abcd|abcd" 

das ist ein gültiger regulärer Ausdruck.

+0

Eine einfache oder werde ich nur "abcd" ODER "abce" und es ist die Standorte. Also im obigen Fall wird es nur die Standorte von abcd finden. – HellSpam

+0

Nein, oder (Änderung) von abcd | abce sollte alle Orte finden, die abcd oder abce entsprechen. – Avi

Verwandte Themen