특정 입력이 정규표현식으로 이루어져서 들어올 때 그 정규표현식을 처리
하기 위해서 regcomp(), regexec() 등의 함수를 사용해야 될 것 같은데
요. 혹시 어떻게 사용하는지, 아니면 이들 함수를 사용한 소스코드 예제
가 있으면 가르쳐 주세요... 부탁드립니다.
/*
* LOCATION see http//www.boost.org for most recent version.
* FILE credit_card_example.cpp
* VERSION see
* DESCRIPTION Credit card number formatting code.
*/
Re: C 코드에서 정규표현식은 어떻게 처리하죠?
http//www.ezdoum.com/stories.php?story=02/05/19/5810629
한글지원이 되는 hg_regexp
http//kldp.net/forum/forum.php?forum_id=138
C++에서는 Boost Library의 Regex++ 을 추천합니다.
gcc가 아닌 경우나 C++ 사용자라면 Boost Library의 Regex++ 을 추천합니다.
GNU Regex 와 사용법이 유사하면서도 훨씬 강력하고 다양한 기능을 제공합니다.
Regex++ 문서 링크
http//boost.org/libs/regex/index.htm
다음은 신용카드 번호를 인식하는 간단한 예제 프로그램입니다.
----------------------------------------------------------------------------------
/*
* LOCATION see http//www.boost.org for most recent version.
* FILE credit_card_example.cpp
* VERSION see
* DESCRIPTION Credit card number formatting code.
*/
#include
#include
#include
using namespace std;
using namespace boost;
bool validate_card_format(const string& s)
{
static const regex e("(\\d{4}[- ]){3}\\d{4}");
return regex_match(s, e);
}
const regex e("\\A(\\d{3,4})[- ]?(\\d{4})[- ]?(\\d{4})[- ]?(\\d{4})\\z");
const string machine_format("\\1\\2\\3\\4");
const string human_format("\\1-\\2-\\3-\\4");
string machine_readable_card_number(const string& s)
{
return regex_merge(s, e, machine_format, match_default | format_sed);
}
string human_readable_card_number(const string& s)
{
return regex_merge(s, e, human_format, match_default | format_sed);
}
int main()
{
string s[4] = { "0000111122223333", "0000 1111 2222 3333",
"0000-1111-2222-3333", "000-1111-2222-3333", };
int i;
for(i = 0; i < 4; ++i)
cout << "validate_card_format(\"" << s[i] << "\") returned "
<< validate_card_format(s[i]) << endl;
for(i = 0; i < 4; ++i)
cout << "machine_readable_card_number(\"" << s[i] << "\") returned "
<< machine_readable_card_number(s[i]) << endl;
for(i = 0; i < 4; ++i)
cout << "human_readable_card_number(\"" << s[i] << "\") returned "
<< human_readable_card_number(s[i]) << endl;
return 0;
}
감사합니다.
감사^^
댓글 달기