2013-03-21 5 views
1

어떻게 든 첫 번째 어커런스 나 정규 표현식을 문자열에 넣는 방법을 찾지 못했습니다. 내가 정규식 개체를 만들 수 있습니다 :첫 번째 boost :: regex match를 문자열에 넣으십시오.

static const boost::regex e("<(From)?([A-Za-z0-9_]+)>(.*?)"); 

는 지금, 나는 std::string([A-Za-z0-9_]+) 일치 할 필요는, playername을 말한다.

std::string chat_input("<Darker> Hello"); 
std::string playername = e.some_match_method(chat_input, 1); //Get contents of the second (...) 

내가 무엇을 놓쳤습니까?
some_match_method 대신 무엇이 있어야하며 어떤 매개 변수를 사용해야합니까?

+0

예제 문자열을 포함 할 수 있습니까? – eandersson

+0

그 사건과 일치하지만 일치하는 결과를 얻을 내 문제가 아니야. 그래서 문자열은 중요하지 않습니다. 나는 그것을 어쨌든 포함시킬 것이다. –

+0

물론, 정규식을'(? <= <(From)?) ([A-Za-z0-9 _] +) (? => (. *?))'로 변경하면 그것에 대해 신경써. – eandersson

답변

2

내가 누락 된 부분은 boost::regex이 정규식이지만 주어진 입력에 대해 구문 분석을 수행하지 않는다고 생각합니다. 사실 boost::regex_search 또는 boost::regex_match의 매개 변수로 사용하여 정규 표현식과 비교하여 문자열 (또는 반복자 쌍)을 평가해야합니다.

static const boost::regex e("<(From)?([A-Za-z0-9_]+)>(.*?)"); 
std::string chat_input("<Darker> Hello"); 
boost::match_results<std::string::const_iterator> results; 
if (boost::regex_match(chat_input, results, e)) 
{ 
    std::string playername = results[2]; //Get contents of the second (...) 
} 
4

당신은 같은 것을 할 수 있습니다 : 당신은 GCC를 사용하지 않는 당신은 (그것을 위해 후원을 필요가 없습니다

또한
static const regex e("<(From)?([A-Za-z0-9_]+)>(.*?)"); 
string chat_input("<Darker> Hello"); 
smatch mr; 
if (regex_search(begin(chat_input), end(chat_input), mr, e) 
    string playername = mr[2].str(); //Get contents of the second (...) 

, 그 정규식 C++ (11)의 일부입니다 유의하시기 바랍니다 , 그것의 stl은 여전히 ​​정규식이 누락되어 있기 때문에)

+0

'regex는 C++ 11의 일부입니다.' – Jamby