2010-01-14 5 views
5

패턴 "regular"가 변수 st의 하위 문자열 인 경우 출력 "match"를 반환하고 싶습니다. 이것이 가능한가?boost 정규 표현식 부분 문자열 일치

int main() 
{ 
    string st = "some regular expressions are Regxyzr"; 

    boost::regex ex("[Rr]egular"); 
    if (boost::regex_match(st, ex)) 
    { 
    cout << "match" << endl; 
    } 
    else 
    { 
    cout << "not match" << endl; 
    } 
} 
+0

당신은 그것을 시도? 그렇다면, 무슨 일이 일어 났습니까? –

+0

예, 일치하지 않음 st = "regular"인 경우 "일치" – bob

답변

16

boost :: regex_match는 전체 문자열과 만 일치합니다. 대신 boost :: regex_search를 사용하는 것이 좋습니다.

7

regex_search 원하는대로 수행합니다.

가 주어진 정규 표현은 주어진 문자 순서

(강조는 내가 인용하고있어 원래의 URL에있는)의 모든 일치 여부를 결정으로 regex_match이 설명되어 있습니다.

0

귀하의 질문은 라이브러리 설명서의 예에 대한 답변 - boost::regex

대체 방법 :

당신은 부스트 ​​:: regex_iterator을 사용할 수 있습니다,이 등 파일 아래

string[0], 
string[1] 

를 분석하는 데 유용합니다 시작과 끝 반복자를 나타냅니다.

예는 :

boost::regex_iterator stIter(string[0], string[end], regExpression) 
boost::regex_iterator endIter 

for (stIter; stIter != endIter; ++stIter) 
{ 
    cout << " Whole string " << (*stIter)[0] << endl; 
    cout << " First sub-group " << (*stIter)[1] << endl; 
} 

}

+0

이 페이지에서 허용되는 대답은 sregex_iterator http://stackoverflow.com/questions/2593288/how-to-use-c에 대해 더 자세히 설명합니다. -boosts-regex-iterator – syam