1. std::tr1::regex, std::tr1::wregex 를 활용한 방법
2. boost의 regex를 사용하는 방법
우선 여기에선 정규표현식을 사용하기 전에 정규표현식 자체의 문법이 올바르지 않을때 발생하는
문제점에 대해서 알아보기로 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include < iostream > #include < regex > int _tmain( int argc, _TCHAR* argv[]) { setlocale ( LC_ALL, "Korean" ); std::wstring strBadWord( _T( "이런 바보 같은 놈들" ) ); std::tr1::wregex regularExpression( _T( "바보" ) ); std::wstring strResult; strResult = std::tr1::regex_replace( strBadWord, regularExpression, std::wstring( _T( "" ) ) ); std::wcout << strResult << std::endl; return 0; } |
여기에서 "바보" 대신에 정규표현식 문자열을 대체하여 사용 가능하다.
정규표현식에 대한 자세한 정보는 검색엔진에서 더욱 훌륭한 설명을 얻을 수 있기 때문에,
실제로 잘못된 정규표현식을 넣으면 어떻게 되는지 살펴보기로 한다.
1 | std::tr1::wregex regularExpression( _T( "[바|보]" ) ); |
1 | std::tr1::wregex regularExpression( _T( "[바|보" ) ); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | #include < iostream > #include < regex > int _tmain( int argc, _TCHAR* argv[]) { setlocale ( LC_ALL, "Korean" ); std::wstring strBadWord( _T( "이런 바보 같은 놈들" ) ); std::tr1::wregex regularExpression; try { regularExpression.assign( _T( "[바|보" ) ); } catch (std::tr1::regex_error e ) { std::wcout << e.what() << std::endl; return 0; } std::wstring strResult; strResult = std::tr1::regex_replace( strBadWord, regularExpression, std::wstring( _T( "" ) ) ); std::wcout << strResult << std::endl; return 0; } |
try, catch문 사용이 부담되는 프로그래머 입장에서 볼 때,
정규표현식이 올바른지 검사하는 API가 외부에 존재한다면 얼마나 좋을까 하는 아쉬움이 남는다.
덧글을 달아 주세요