2017-08-09 5 views
0

Mon code actuel est:Comment faire correspondre " n" dans Poco :: RegularExpression C++?

#include <iostream> 
#include <Poco/Foundation.h> 
#include <Poco/RegularExpression.h> 

int main() 
{ 
    Poco::RegularExpression regex("[A-Z]+\s+[A-Z]+"); 
    Poco::RegularExpression::MatchVec mvec; 
    constad std::string astring = "ABC\nDEFG"; 

    int matches = regex.match(astring,0,mvec); 

    std::cout << "Hello World\n"; 

    return 0; 
} 

La position du « \ n » dans la chaîne que je suis en train de match peut être, un espace unique, des espaces multiples, ou une nouvelle ligne (donc pourquoi je me sers des espaces méta caractère).

Le nombre de résultats renvoyés est zéro. Y a-t-il un drapeau que je dois définir ou quelque chose?

+0

Double la barre oblique inverse, puisque '\ s' n'est pas une séquence d'échappement reconnue en chaîne littérale. – nhahtdh

+0

N'est-ce pas _line-end_ '$' pour regex? – user0042

Répondre

0

Le problème est la séquence de Scape dans votre regex.

Dans ce cas, vous voulez ajouter une barre oblique inverse (\) dans la chaîne astring, en utilisant le jeton \s, mais en C/C++ ou Java, il doit être écrit que le double \\. Donc, pour résoudre votre problème, vous devez ajouter une autre barre oblique inverse:

Poco::RegularExpression regex("[A-Z]+\\s+[A-Z]+"); 

Ici vous pouvez trouver la référence:

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

0

Cela devrait fonctionner

Poco::RegularExpression s ("\\s"); // White char 
Poco::RegularExpression n ("\\n"); // New line 
Poco::RegularExpression r ("\\r"); // Carrige return 
Poco::RegularExpression t ("\\t"); // Tabulator