반응형
POSIX 정규표현식에서 확장된 Perl 방식의 PCRE . . . . 복잡한 설명은 제쳐두고
사용을 하긴 해야하는데 명확하게 사용하는 방법이 나와있는 것을 찾기가 어려워서 정리를 해보았습니다.
1. 검증을 받기위해서 정규식 데이터 세팅
// 1. 검증을 받기위함 정규식 데이터 ( 주민등록번호)
char *regex = "(?:[0-9]{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[1,2][0-9]|3[0,1]))-[1-4][0-9]{6}";
검증을 받기위한 데이터를 변수에 넣어준다.
아래의 사이트를 통해서 원하는 정규식을 만들어 낼 수 있다.
2. 정규식 패턴을 가지고 컴파일을 진행
// 2. 패턴 컴파일 (검출을 하기 위해서 패턴을 미리 컴파일해준다.)
pcre *re = NULL;
re = pcre_compile (regex, /* the pattern */
PCRE_CASELESS,
&szError, /* for error message */
&nErroroffset, /* for error offset */
0); /* use default character tables */
if (!re)
{
printf("pcre_compile failed (offset: %d), %s\n", nErroroffset, szError);
return ;
}
PCRE_CAELESS
- 이 값은 패턴의 문자에서 대문자와 소문자를 구별하지 않겠다는 것
3. 정규식 검출 시작
// 3. 정규식 검출 시작
// 검출된 위치는 oVector에 인덱스로 저장됨, 0 1 한묶음 2 3 한묶음 이런식으로 됨
while( ( nRet = pcre_exec(re, 0, strTextOutBuffer.c_str(), strTextOutBuffer.length(), nStartPos, 0, oVector, 3) ) > PCRE_ERROR_NOMATCH)
{
strMatch = strTextOutBuffer.substr(oVector[0], oVector[1] - oVector[0]);
strMatch;
vector<int> vItemMaskPostList;
for( int i = 8; i < 14; i++ )
{
vItemMaskPostList.push_back(i);
}
}
전체소스
#include "pcre.h"
// 1. 검증을 받기위함 정규식 데이터 ( 주민등록번호)
char *regex = "(?:[0-9]{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[1,2][0-9]|3[0,1]))-[1-4][0-9]{6}";
const char *szError;
int nErroroffset = 0;
// 2. 패턴 컴파일 (검출을 하기 위해서 패턴을 미리 컴파일해준다.)
pcre *re = NULL;
re = pcre_compile (regex, /* the pattern */
PCRE_CASELESS,
&szError, /* for error message */
&nErroroffset, /* for error offset */
0); /* use default character tables */
if (!re)
{
printf("pcre_compile failed (offset: %d), %s\n", nErroroffset, szError);
return ;
}
string strTextOutBuffer = "711111-1111117 테스트 711111-1111117"; // 검증받을 대상 텍스트
string strMatch;
int nRet = -1;
int nStartPos = 0; // 검출을 시작할 위치
int oVector[3]; // 정규식 결과를 담을 변수
//신규 마스킹을 사용하기 위해서
string szMasking;
int m_nMaskRightReplace = 8; // 마스킹 시작점부터 마지막 지점까지의 길이
int m_nMaskRightStart = 0; // 마스킹 시작지점
int nPcdLastStartPos = 0; // 마지막에 시작한 시점의 위치
// 3. 정규식 검출 시작
// 검출된 위치는 oVector에 인덱스로 저장됨, 0 1 한묶음 2 3 한묶음 이런식으로 됨
while( ( nRet = pcre_exec(re, 0, strTextOutBuffer.c_str(), strTextOutBuffer.length(), nStartPos, 0, oVector, 3) ) > PCRE_ERROR_NOMATCH)
{
strMatch = strTextOutBuffer.substr(oVector[0], oVector[1] - oVector[0]);
strMatch;
vector<int> vItemMaskPostList;
for( int i = 8; i < 14; i++ )
{
vItemMaskPostList.push_back(i);
}
}
반응형
'훈, IT 공부 > C,C++,MFC' 카테고리의 다른 글
[VS에러] 함수에서 참조되는 확인할 수 없는 외부기호 LNK1120, LNK2019 (6) | 2021.01.14 |
---|---|
[C++] 멀티바이트 -> 유니코드 변환을 위한 4가지 방법 (6) | 2020.06.05 |
Library, DetourCreateProcessWithDll() 함수 (6) | 2019.09.17 |
Visual Studio 2008 - fatal error C1859 미리 컴파일된 헤더에서 예기치 않은 오류가 발생했습니다. 컴파일러를 다시 실행하면 이 문제를 해결할 수 있습니다. (6) | 2019.06.17 |
C/C++/Window, 서비스에서 UI 실행시키기 (6) | 2019.05.10 |
댓글