Hilfe bei Regulärem Ausdruck



  • Ich möchte mit einem regulären Ausdruck folgendes parsen können und auf die Teilstrings zugreifen (das ist immer einer der vier Teile, ohne dem Punkt):

    12.+34.0.*

    Also gültig ist eine Zahl, ein Plus gefolgt von einer Zahl, ein Stern

    Mein regulärer ausdruck sieht so aus:

    //Validate format specifier
    boost::regex re("(\\+\\d+|\\*|\\d+)\\.(\\+\\d+|\\*|\\d+)\\."
    		"(\\+\\d+|\\*|\\d+)\\.(\\+\\d+|\\*|\\d+)" );
    

    Aber bei folgendem Testaufruf, erhalte ich in res[ 1 ] immer den gesamten String und nicht den Teilstring

    boost::smatch res;
    
    if( boost::regex_search( "0.*.+3.3", res, re ) )
    {
      std::cout << res[ 1 ];
    }
    

    Wie müsste der reguläre Ausdruck denn richtig aussehen?



  • Muss mich korrigieren, das Problem ist nicht, dass er nicht matcht, obige Testausgabe, liefert das richtige, aber die 0, also das erste Feld wird verschluckt, das war das Problem.
    Statt einer 0 eine 10 bringt als Ausgabe ein Leerzeichen und anschließend eine 0.

    Ausgabe bei 10.*.+3.3

    0
    *
    +3
    3



  • Das Zitat hat das Leerzeichen verschluckt, nochmal in code-tags

    0
    *
    +3
    3
    


  • Oh mann, ich hab zwar keine Ahnung woran der Fehler da oben lag, aber plötzlich war er weg, ka wieso.

    Das ist mir erst wegen nem anderen Fehler aufgefallen, und der war, dass smatch bei 1 und nicht bei 0 anfängt, oh mann wie kann man nur sowas machen *g*


Log in to reply