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;
}