2017-02-04 13 views

答えて

2

regex_matchのみ全体の入力文字列を一致させるためです。あなたの正規表現は、バックスラッシュをエスケープして"^\\w*uild(?=ing$)と正しく書かれているか、raw stringR"(^\w*uild(?=ing$))"として実際には接頭辞buildとマッチ(消費)します。 ing$が先に見え、正常に検索されますが、入力文字列全体が消費されなかったため、regex_matchは一致を拒否します。

あなたはregex_matchを使用しますが、最初の部分だけをキャプチャしたい場合は、(文字列全体が一致しなければならないため、あるいは単に(\w*uild)ing^(\w*uild)ing$を使用し、第一のキャプチャグループにアクセスすることができました。

しかし、あなたはとにかく^$を使用していることから、あなたにも代わりにregex_searchを使用する場合があります。

int main() 
{ 
    std::cmatch m; 
    if (std::regex_search("building", m, std::regex(R"(^\w*uild(?=ing$))"))) { 
     std::cout << "m[0] = " << m[0] << std::endl; // prints "m[0] = build" 
    } 
    return 0; 
} 
関連する問題