Frage zu RegEx



  • Hallo zusammen

    ich arbeite mich aktuell in Reguläre Ausdrücke ein und habe ein Beispiel konstruiert, was ich nicht verstehe.

    #include <iostream>
    #include <string>
    #include <regex>
    
    int main(int, char **)
    {
       std::string test_match("abc \r\n def");
       std::string test_nomatch("abc \r\n def \r\n");
    
       std::regex rgx(R"(^[^\r]*\r\n.*$)");
    
       if(std::regex_match(test_match, rgx))
          std::cout << "match" << std::endl;
       else
          std::cout << "no match" << std::endl;
    
       if(std::regex_match(test_nomatch, rgx))
          std::cout << "match" << std::endl;
       else
          std::cout << "no match" << std::endl;
    
       return 0;
    }
    

    Output ist bei mir folgender:

    match
    no match

    Warum matched das zweite nicht?
    Kann bitte jemand mein Gehirn entknoten? 😋

    gruß Tobi



  • It0101 schrieb:

    Warum matched das zweite nicht?

    Weil die im Regex definierten Regeln wohl nicht auf den zweiten String zutreffen, nehme ich an.
    Wenn das eine Regex Frage ist, kann ich dir diese Seite empfehlen, hilft beim Regex basteln.


  • Mod

    Das Atom . matched keine Newlines. \r\n wird daher von nichts gematched, und das matching von $ schlägt fehl, weil die Implementierungen nicht den Multiline Modus annehmen. Das wird momentan von LWG 2343 behandelt. Deren Information ist stimmig: Boost hat Multiline standardmäßig aktiviert, und matched deinen zweiten String ebenfalls.



  • ok danke euch. 🙂 Ich geh mal den Schalter suchen 😉


Log in to reply