리셋 되지 말자

[g++] 정규식 문자열 찾기 및 찾은 문자열 출력 본문

gcc

[g++] 정규식 문자열 찾기 및 찾은 문자열 출력

kyeongjun-dev 2020. 1. 28. 11:24

https://www.sapphosound.com/archives/1653

 

[C++11] std::regex를 이용해 정규식으로 특정 문자열을 추출해보자! – Roughness Leads To Perfection

Modern C++이라고 보통 부르는 C++11 스펙에 정규식이 추가되었다. 따라서 이전까지는 std::string::find를 이용해 복잡한 조건과 플로우를 조합해야 검색할 수 있던 것들을 정규식으로 간단하게 찾아낼 수 있게 되었다. 하지만 C++에서 정규식을 곧바로 이용하기에는 많은 어려움이 있다. 일단 생긴지도 몇 년 되지 않았고 각종 컴파일러에서 이것을 제대로 지원하게 된 지도 얼마 되지 않아 다양한 상황에 대한 참고자료가 인터넷에 충분히 올라와

www.sapphosound.com

regex_search나 regex_match를 사용하면, 찾기에 성공했는지의 결과만 0,1 로 알수가 있는데, 위의 사이트의 게시물 작성자분의 코드대로 하면 찾은 문자열을 출력할 수 있다...

 

아래의 코드는 snmp inOctets, outOctets을 파싱하기 위해 내가 수정한 코드

#include <iostream>
#include <string>
#include <regex>
using namespace std;
int main(){
        //string s = "IF-MIB::ifInOctets.2 = Counter32: 519940";
        //std::regex pattern("([0-9]+)(?!.*[0-9])");
        //cout << std::regex_search(s, pattern);

        string str = "IF-MIB::ifInOctets.2 = Counter32: 519940\nIF-MIB::ifOutOctets.2 = Counter32: 1317538";
        std::regex regexp("([0-9]+)(?!.*[0-9])");

        const std::sregex_iterator itEnd;
        for (std::sregex_iterator it(str.begin(), str.end(), regexp); it != itEnd; ++it)
        {
                //for (auto elem : *it) { cout << elem << endl; }
                cout << (*it)[1].str() << endl;
        }
        return 0;
}

 

Comments