2011-04-27 3 views
1

I 해요 정규 표현식에 새로운 - 내가 문자열에서 IP 주소를 끌어 C++로 마시고을 사용하여 문자열 벡터에 IP가 일치하는 모든 넣어 (시도) 오전 :C++ 정규 표현식

string result = tcpClient.receiveRaw(); 

RegularExpression re("\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b"); 

RegularExpression::MatchVec matches; 
re.match(result, 0, matches); 

IPlist = result.substr(matches[1].offset, matches[1].length); 

I 돈 마지막 줄은 정확하다고 생각하지 않습니다 (어떻게 작동하는지 모르겠습니다). 나는 그 초기 문자열에서 모든 IP 주소를 가져 와서 문자열 벡터에 추가하려고합니다.

+4

나는 Poco에 대해 알고 싶지 않습니다. 하지만 boost의 정규 표현식을 살펴 보는 것이 좋습니다. http://www.boost.org/doc/libs/1_46_1/libs/regex/doc/html/index.html –

+1

@ChristianSeverin 모든 편집을하면 앞 페이지에 질문하고 많은 소음을 만들 수 있습니다. 태그가 다시 지정되어야한다고 생각되면 [meta] (http://meta.stackoverflow.com/)에서 먼저 질문하십시오. – JAL

답변

0

왜 C POSIX 정규 표현식을 사용하지 않을까요? 그 너머

http://pubs.opengroup.org/onlinepubs/007908799/xsh/regcomp.html

, 여기에 실제로 문제가 있는지 다음은 문서입니까? 실제 문제를 지정하지 않았습니다. 나는 사용하고있는 수업에 익숙하지 않지만 IPlist가 무엇인지 알지 못한다는 것을 제외하고는 아무 것도 분명히 부러진 것 같지 않습니다. 그것은 목록 인 것처럼 보이지만 단일 문자열 값과 동일하게 설정됩니다. 나는 논리가 바람직하지 않을 것으로 생각한다.

2

표현식을 단축 할 수 있으며 \b은 아마도 다른 탈출구가 필요합니다 (하지만 Poco에 익숙하지 않아서 벗어날 수 있습니다). 사용해보기 :

RegularExpression re("\\b((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b");