2011-02-28 5 views
5

나는 다중 행 문자열의 행과 일치하는 Boost가있는 C++의 정규 표현식을 사용합니다. 정규식 검색은 첫 번째 일치 항목을 찾습니다. 그러나 일치하는 마지막 줄에 관심이 있습니다. "(?<Group>Data.)"이었다 input"Data1 Data2 Data3"했다Boost :: Regex의 마지막 일치 항목 가져 오기

matched = boost::regex_search(input, results, regex);    
if (!matched) { 
    return -1; // error code 
} 
matched_string = results["Group"]; 

regex 경우, matched_string"Data1" 지금 :

내가 지금 사용하고 코드는 다음과 같은 것입니다. 나는 그것이 "Data3"이되기를 원한다.

답변

5

operator[]match_resultssub_match을 반환합니다. sub_match 이터레이터의 std::pair을 상속받습니다. 해당 firstsecond 명의 회원은 일치하는 범위에 해당합니다. 새 검색의 시작 지점은 second입니다. 예 :

string input = "Data1 Data2 Data3"; 
regex re("(?<Group>Data.)"); 
string::const_iterator begin = input.begin(), end = input.end(); 
smatch results; 
while (regex_search(begin, end, results, re)) { 
    smatch::value_type r = results["Group"]; 
    begin = r.second; 
} 

희망이 있습니다.

+1

'smatch :: const_reference r = results [ "Group"]'을 사용하면 불필요한 복사를 피해야합니다. – maxschlepzig

관련 문제