2017-03-29 2 views
1

Ich muss eine C++ Regex schreiben, aber ich bin nicht in der Lage, korrektes Ergebnis auf Regex_match zu erhalten, da ich neu in C++ bin. Die Zeichenfolge zum Testen ist: D10A7; Lass uns sagen unsigned_char[] stringToBeTested="D10A7"; Was ich tun muss, ist nach Regex_match Ich werde 10 und 7 in zwei verschiedenen kurzen Variablen für die Anwendung zu extrahieren. Ziffer nach 'D' ist immer zweistellig und Ziffer nach 'A' ist immer eine Ziffer. Mein Versuch, es zu tun ist:Warum regex_match stimmt nicht mit meiner Regex überein?

boost::regex re("D([0-9])(/([0-9]))?"); 
boost::cmatch mr; 
if (boost::regex_match(stringToBeTested, mr, re)) 
{  
    number = atoi(mr.str(1).c_str()); //Must be 10 
    axis = atoi(mr.str(2).c_str()); //Must be 7 
} 

Wie die boost :: regex re für diesen Zustand zu erzeugen, erklären Sie bitte die Antwort im Detail.

+1

Was ist mit dem Schrägstrich? Es gibt keinen Schrägstrich in der Zeichenfolge, die Sie abgleichen möchten. –

+0

Auf einer Randnotiz empfehle ich, mehr C++ ish ['std :: stoi()'] (http://en.cppreference.com/w/cpp/string/basic_string/stol) zu verwenden, was Ihnen erlaubt Entfernen Sie die '.c_str()', die in reinem C++ - Code nicht verwendet werden sollten, z. G. 'number = stoi (mr.str (1))'. – zett42

Antwort

3

Die regex_match erfordert eine vollständige Zeichenfolge Übereinstimmung. Sie müssen ein Muster bereitstellen, das dies tut. Hier

boost::regex re("D([0-9]{2})A([0-9])"); 

,

  • D - passend D
  • ([0-9]{2}) - fängt in Gruppe 1 zwei Ziffern
  • A - passend A
  • ([0-9]) - fängt in Gruppe 2 eine einzelne Ziffer.

Siehe die online demo of the above regex.

+0

danke für die Antwort, nur um Zweifel zu beseitigen, nehmen wir an, ich habe 'D124' und es muss Nummer = 12 und Achse = 3 speichern. Was wird das Regix jetzt sein (Weil ich 'A' hier entfernt habe). Und was ist die Rolle von '/' in der Regex? Ich kann keine gute Dokumentation finden, die ich noch gut verstehe. –

+1

Sie können ['^ D ([0-9] {2}) (?: A? ([0-9]))? $'] (Https://regex101.com/r/Zp1vk0/1) verwenden. dann. Das '/' Symbol hat keine spezifische Bedeutung in einer Regex, es wird als wörtliches '/' Symbol abgeglichen. –

+0

Und dieses '?' Mark bedeutet was? –

Verwandte Themen