C++ Regex problem



  • Hallo~

    std::wstring parsedDescriptor = std::wstring(CString(pszSessionIdentifier));
    
      try {
        std::wregex word_regex(L"\\([^\]*)\.exe",  std::regex::extended);
    
        auto words_begin = std::wsregex_iterator(parsedDescriptor.begin(), parsedDescriptor.end(), word_regex);
        auto words_end = std::wsregex_iterator();
        if (words_begin != words_end) {
          std::wstring match = words_begin->str();
          _tprintf(_T("Match \"%s\"\n"), match.c_str());
        }
    
      }
      catch (...) {
        _tprintf(_T("Error was caught\n"));
      }
    

    Inhalt 'parsedDescriptor'

    {0.0.0.00000000}.{721f7fcf-7af7-4371-8ebf-bf16342ba3c5}|\Device\HarddiskVolume2\Program Files (x86)\Steam\Steam.exe%b{00000000-0000-0000-0000-000000000000}

    Mein test der regex dazu: http://rubular.com/r/caCN0lP5lI

    Ich kriege aus der regex keinerlei match. Bin gerade ziemlich ratlos was da los sein könnte. Hab versucht das ganze mal auf einem online 'extended POSIX regular expression grammar' durchlaufen zu lassen und da hat er die matches ausgespuckt.

    Überseh Ich gerade was doofes?

    ----

    Das fängt an wie vor 5 Jahren. Immer wenn Ich hier ein Forum post mache finde Ich den Fehler.

    Schätze ich lasse mal die Lösung da falls jemand anderes noch das problem hat.

    Ich habe mal den Inhalt von 'word_regex' inspiziert. Die escape charaktere wurden natürlich als solche auch vom string interpretiert und die regex war so gesehen falsch. Die Lösung war

    std::wregex word_regex(L"\\\\([^\\\]*)\\.exe",  std::wregex::extended);
    

    womit 'word_regex' zur laufzeit

    \([^\]*)\.exe

    enthält.



  • Hi, schau dir mal...

    http://en.cppreference.com/w/cpp/language/string_literal

    ...an. Genauer Punkt 6. Das hilft dabei ungemein...

    Hth



  • Nice das kannte ich noch nicht.


Anmelden zum Antworten