2017-02-04 74 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; 
} 
相關問題