Post List

2014년 12월 29일 월요일

regex 정규식(Regular Expression) Unicode, Multibyte 모두 동작하는 Code

Visual Studio 2010 이후에는 std::tr1의 namespace에서 regex가 지원된다.
이번 버전이라면 boost Library를 다운받아서 설치해야 한다. (http://www.boost.org)

원래는 Multibyte 에서는 regex 라는 class를 사용하고,
          Unicode에서는 wregex 를 사용한다.

하지만 2개의 차이는 typedef basic_regex<char> regex
                            typedef basuc_regex<wchar_t> wregex
의 차이일 뿐이다.
char, wchar_t를 대신해서 _TCHAR 를 활용하는 것을 응용해서 아래 Code와 같이 하면
Multibyte, Unicode에서 모두 사용가능한 Regular Expression 이 된다.

#include <regex>

const bool IsRealNumber(CString &p_str)
{
  using namespace std::tr1;

  bool bRet = false;
  basic_regex<_TCHAR> exp(_T("^([0-9]+.[0-9]*)|([0-9]*.[0-9+)|([0-9]+)$"));

  if (regex_match<_TCHAR, regex_traits<_TCHAR>(p_str.GetBuffer(), exp)) bRet = true;

  p_str.ReleaseBuffer();
  return bRet;
}

위 예제는 실수인지를 판단하는 Code이다.

댓글 없음:

댓글 쓰기