정규식을 더 빨리 잊어 버렸습니다. 주요 PITA입니다. 어쨌든 HTTP 응답 상태 라인을 구문 분석하고 하위 요소를 올바르게 캡처하도록 RE를 원했습니다. 나는이 일을 얻었다 :부스트 정규 표현식을 사용하여 텍스트 토큰 화
const boost::regex status_line("HTTP/(\\d+?)\\.(\\d+?) (\\d+?) (.*)\r\n");
std::string status_test1("HTTP/1.1 200 hassan ali\r\n");
boost::smatch what;
std::cout << regex_match(status_test1,what, status_line, boost::match_extra) << std::endl;
std::cout << what.size() << std::endl;
BOOST_FOREACH(std::string s, what)
{
std::cout << s << std::endl;
}
네 번째 캡처 그룹은 특히 단어를 토큰 화하는 것과 관련이있다. 하지만 내 일이 끝나기 위해 나는 그것을 필요로하지 않는다. 그러나, 나는 여전히 '\ 0'으로 끝나는 공간 분리 된 문장을 토큰 화하는 방법을 알고 싶다. 스트립 된 단어의 벡터/배열이된다.
나는 다음과 같은 단편은이 "hassan ali syed "
일치하지해야
const boost::regex sentence_re("(.+?)((.+?))*");
boost::smatch sentence_what;
std::string sentence("hassan ali syed ");
std::cout << boost::regex_match(sentence,sentence_what,sentence_re, boost::match_extra) << std::endl;
BOOST_FOREACH(std::string s, sentence_what)
{
std::cout << s << std::endl;
}
을 작동시킬 수는 없지만, "hassan ali syed"
일치해야하고, 캡처 그룹해야한다 (줄 바꿈 포함) 출력 hassan
ali
syed
, 그러나 그것을 출력 hassan
syed
syed
(주, 세 번째 셰 <space>syed
의 공간. 내가 캡처 그룹이 재귀 개체를 처리 할 수없는 가정?
그래서 PCRE 구문에서 토큰 화 작업을 지정하는 깨끗한 토큰 벡터가 생성됩니다 (반복하지 않고 - 즉, 중첩 그룹이 공백을 제거하려고하지 않음).
나는 이것이 직업에 적합한 도구가 아니라는 것을 알고있다. spirit/lexx 또는 boost :: tokenise가 가장 좋으며, 그것에 대해 올바른 방법이 아니라는 것을 알고있다. .net에서 스크린 스크래핑을 할 때 토큰이 다 떨어질 때까지 반복적으로 정규 표현식을 본문에 적용하여 텍스트 본문에 토큰을 찾습니다.
참고 : 나는 C++ 또는 부스트 :: 정규 표현식 사용자가 아닙니다. –