리셋 되지 말자

[g++] 정규식 라이브러리 활용 본문

gcc

[g++] 정규식 라이브러리 활용

kyeongjun-dev 2020. 1. 28. 14:05

regex_search : 문자열 내에 정규식에 부합하는 문자열 찾기 or 추출(bool 반환)

regex_match : 정규식과 완벽히 일치하는 문장이면 true

 

일치여부만을 따지지 않고, 일치하는 문자열을 따로 출력하거나 저장 등등에 사용하려면

regex_search와 match_results를 같이 사용하면 된다.

 

●정규식

 ([0-9]+)(?!.*[0-9]) 

(문장의 맨 끝에있는 숫자를 검색하는 정규식)

 

●문자열

IF-MIB::ifInOctets.2 = Counter32: 519940\nIF-MIB::ifOutOctets.2 = Counter32: 1317538

 

●목표

519940과 1317538만 따로 찾아내어 따로 사용할 수 있어야 한다.

 

●코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// regex_search example
#include <iostream>
#include <string>
#include <regex>
 
int main()
{
    std::string s("IF-MIB::ifInOctets.2 = Counter32: 519940\nIF-MIB::ifOutOctets.2 = Counter32: 1317538");
    std::smatch m;
    std::regex e("([0-9]+)(?!.*[0-9])");   // matches words beginning by "sub"
 
    while (std::regex_search(s, m, e)) {
        std::cout << m.str(0).c_str();
        s = m.suffix().str();    
    }
    
    return 0;
}
cs

 

●설명

정규식 regex e 를 보면, 괄호로 두 부분으로 나누었는데, 두 부분을 구분하여 사용할 수 있다.

suffix().str() : 정규식의 뒷부분

prefix().str() : 정규식의 앞부분

 

smatch m(0)의 인덱스 부분인 0는 인덱스에 따라 다르다.

m[0].str() : 정규식에 일치하는 문자열 전체

m[n].str() : n번째 그룹의 문자열 (m.str(n), *(m.begin()+n) 과 동일)

 

●참고한 사이트

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

http://www.cplusplus.com/reference/regex/regex_search/

http://www.jiniya.net/ng/2017/11/regex/

https://devluna.blogspot.com/2014/12/regexsearch.html

 

Comments