2017-02-04 5 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; 
}