반응형


+정규식으로 스트링의 일부를 찾아 추출한다.



cpp 정규식 검색/매칭

- 스트링에서 특정 class명으로 나온 태그에서 href의 url 부분만 추출하기.
-1단계
class="i-e" 로 시작하고, <, > 문자가 나오기 전까지 중간 부분 추출.
-2단계
추출된 부분에서 href=으로 시작하고 ", " 사이에 있는 중간 부분 추출.

regex_search() 함수로 찾는다. match 결과의 [0]은 패턴이 맞는 부분의 전체 스트링을 추출.
[1], [2], 등은 그 다음에 패턴에서 ()로 싸인 부분 순서대로 추출.


#include <iostream>

#include <string>

#include <regex>

using namespace std ;

string html="<a class=\"i-e\" href=\"DATA IM INTERESTED IN\">\n\

<a class=\"chrome\" href=\"nono chrome\">\n\

<a class=\"i-e\" href=\"ie like1\">\n\

<a class=\"chrome\" href=\"nono chrome\">\n\

<a class=\"i-e\" href=\"ie like2\">\n\

<a class=\"chrome\" href=\"nono chrome\">\n\

<a class=\"chrome\" href=\"nono chrome\">\n\

<a class=\"i-e\" style=\"font-size:10pt;\" href=\"ie like3\">\n\

<a class=\"chrome\" href=\"nono chrome\">\n\

<a class=\"chrome\" href=\"nono chrome\">\n\

<a class=\"i-e\" href=\"ie like4\"> <a class=\"i-e\" href=\"ie like5\">\n\

";

int main() {

smatch m, m2 ;

regex e ( "class=\"i-e\"([^<>]+)>" ) ; // get: href="ie like"

regex e2 ( "href=\"(.+)\"" ) ; // get ie like

bool r, r2 ;

string content ;

int start=0 ;

cout << "input html : " << html << endl ;

do {

content = html.substr(start) ;

// cout << "content:"<<content<<endl;

r=regex_search(content, m, e) ;

if ( r ) {

// cout << "search: " << r << endl ;

// cout << "str: " << m.position() << " "<< m.str() << endl ;

cout << "match : " << m[1] << endl ;

r2 = regex_search((string)m[1], m2, e2) ;

if ( r2 ) {

cout << " URL : " <<m2[1]<<endl ;

}

}

start+=m.str().length()+m.position();

} while( r );

return 0 ;

}

g++ test_regex2.cpp
./a.out

input html : <a class="i-e" href="DATA IM INTERESTED IN">

<a class="chrome" href="nono chrome">

<a class="i-e" href="ie like1">

<a class="chrome" href="nono chrome">

<a class="i-e" href="ie like2">

<a class="chrome" href="nono chrome">

<a class="chrome" href="nono chrome">

<a class="i-e" style="font-size:10pt;" href="ie like3">

<a class="chrome" href="nono chrome">

<a class="chrome" href="nono chrome">

<a class="i-e" href="ie like4"> <a class="i-e" href="ie like5">


match :  href="DATA IM INTERESTED IN"

 URL : DATA IM INTERESTED IN

match :  href="ie like1"

 URL : ie like1

match :  href="ie like2"

 URL : ie like2

match :  style="font-size:10pt;" href="ie like3"

 URL : ie like3

match :  href="ie like4"

 URL : ie like4

match :  href="ie like5"

 URL : ie like5


'Develop > C&CPP' 카테고리의 다른 글

Vector 3  (0) 2018.05.23
Vector 2  (0) 2018.05.18
Vector 1  (0) 2018.05.16
gdb로 디버깅하기  (0) 2018.03.06
mutex 동기화 예제  (1) 2018.03.06

+ Recent posts