2017-08-09 11 views
0

私の現在のコードは次のとおりです。Poco :: RegularExpression C++で " n"をどのようにマッチさせるか?

#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; 
} 

私が一致しようとしている文字列では「\ n」の位置は、単一のスペース、複数のスペース、または改行することができます(それゆえ、なぜ私は空白を使用していますメタキャラクタ)。

返される一致の数はゼロです。私は何か設定する必要がある旗がありますか?

+0

ダブルアップバックスラッシュ:あなたが参照を見つけることができるここで

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

:だから、あなたの問題を解決するために、あなたは別のバックスラッシュを追加する必要があります文字列リテラルで。 – nhahtdh

+0

正規表現に_line-end_ '$'はありませんか? – user0042

答えて

0

動作するはずです。この場合

あなたはトークン\sを使用して、文字列astringにバックスラッシュ(\)を追加したいのですが、C/C++やJavaには、二重\\として書かなければなりません。 \のS`が認識エスケープシーケンスではない `以来、

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

0

これは、問題は、あなたの正規表現でスケープシーケンスである

Poco::RegularExpression s ("\\s"); // White char 
Poco::RegularExpression n ("\\n"); // New line 
Poco::RegularExpression r ("\\r"); // Carrige return 
Poco::RegularExpression t ("\\t"); // Tabulator 
関連する問題