2016-09-24 6 views
1

Ich begann gestern über regex Lernen und beim Lernen, sah ich, dass \ für Leerzeichen verwendet wird, s. Wenn ich jedoch ein Leerzeichen eingeben möchte, wird es in C++ nicht erkannt. s funktioniert nicht in C++ regex

Code:

#include <iostream> 
#include <regex> 
using namespace std; 

int main() { 
    string str; 
    cin>>str; 

    regex e("a+\\s+b+"); 
    bool found = regex_match(str,e); 
    if (found) 
    { 
    cout<<"Matched"; 
    } 
    else 
    { 
    cout<<"No Match"; 
    } 
    return 0; 
} 

Eingang: ab
Ausgang: Kein Spiel

https://ideone.com/ULJrkQ

wenn ich ersetzen \\s mit \\w innerhalb des oben genannten Code und Eingang etwas wie folgt aus:

Input: 0 azb Ausgang: Matched

http://ideone.com/4yBS4Z

Ich verstehe nicht, warum \ s einfach weigert zu arbeiten. Ich habe online nach einer Antwort auf dieses Problem gesucht, konnte aber nicht herausfinden, was genau das verursacht.

I verwenden Codeblocks 16 mit IDE GNU/GCC-Compiler mit Unterstützung auf Windows 11 aktiviert C++ und C++ 14 (GCC 5.1) auf IDEONE.

Jede Hilfe würde sehr geschätzt werden. Vielen Dank.

+3

Ah, äh, ja, hier das Problem ist, dass 'cin >> str' beim ersten Leerzeichen Lesen zu stoppen. Ich empfehle, dass Sie stattdessen den Wert von 'str' codiert den regulären Ausdruck für die Prüfung:' String str = „Hallo Welt“; ' –

+2

@ magnus-hoff richtig ist. cin >> str; => getline (cin, str); – pavnik

+0

Wow, ich fühle mich dumm. Vielen Dank für die Klärung. – Overlord

Antwort

1

Nur sicherstellen, dass Sie die ganze Zeile lesen, eine Lösung ist std::getline(cin, str) anstelle von cin >> str zu verwenden. Siehe das Beispiel Arbeits here one Ideone:

#include <iostream> 
#include <regex> 
using namespace std; 

int main() { 
    string str; 
    getline(cin, str); 

    regex e("a+\\s+b+"); 

    if (regex_match(str,e)) 
     cout<<"Matched"; 
    else 
     cout<<"No Match"; 
    return 0; 
}