프로그래밍 관련
정규 표현식(Regex) 강좌 8편. 역참조(backreferences)
정규 표현식(Regex) 강좌 8편. 역참조(backreferences)
2012.12.251. 역참조(backreferences) 역참조(backreferences)란 무엇일까요? 말 그대로 역으로 참조하는 것을 나타냅니다. 정규 표현식에서는 패턴의 일부를 하위 표현식으로 묶으면, 첫번째로 나타나는 부분 문자열을 찾은 뒤에 역참조를 통해 이후에 나타나는 부분 문자열을 찾을 수 있습니다. 이때, 각 하위 표현식은 번호로 식별됩니다. 이 역참조를 통해서, 반복되는 두 문자를 쉽게 찾을 수 있습니다. 예를 들어서, why so so serious에서 역참조를 통해 so so를 일치시킬 수 있습니다. 더 확실한 이해를 위해 아래 예제부터 살펴보도록 합시다. Reg. Expression:\b([a-z]+) \1\bText:why so so serious 위의 정규 표현식을 자세히 살펴보면, \b라는 ..
정규 표현식(Regex) 강좌 7편. 하위 표현식(Subexpression)
정규 표현식(Regex) 강좌 7편. 하위 표현식(Subexpression)
2012.12.251. 하위 표현식(Subexpression) 하위 표현식(Subexpression)이란, 특정 패턴, 표현식을 하나의 항목으로 처리하는 것입니다. 이 하위 표현식을 사용하려면 소괄호를 사용해야 합니다. 참고로, 소괄호 역시도 메타 문자이기 때문에, 소괄호 그 자체를 찾으려면 \(, \)와 같이 이스케이프 해주어야만 합니다. 아래 예를 한번 보도록 합시다. Reg. Expression: abc{2} Text: abcc abcabc 위의 일치된 텍스트를 보시면, 예상과는 다르게 abcabc가 아닌 abcc가 일치되었습니다. 무엇이 잘못되었나 살펴보았더니, {2}는 앞에 등장한 문자의 범위를 지정하는 녀석입니다. {2} 앞에 있는 문자는 c이고, c가 2번 등장하니 abcc가 일치될 수 밖에 없었습니다. 이제..
정규 표현식(Regex) 강좌 6편. 수량자(Quantifier)
정규 표현식(Regex) 강좌 6편. 수량자(Quantifier)
2012.12.241. 수량자(Quantifier) 오늘 배우게 될 수량자는 아래와 같습니다. (참고로 앞에서 배웠던 메타 문자 +, *, ?도 수량자에 속함) 수량자 설명 {n} 정확히 n개만을 찾습니다. {n,} n개 이상을 찾습니다. {n,m} 최소 n개, 최대 m개의 경우를 찾습니다. (n 혹은 m은 정수이고 음수가 올 수 없습니다.) 위의 수량자들을 차례대로 알아보도록 합시다. 우선 첫번째 수량자인 {n} 입니다. 이 수량자가 뒤에 따라오면, 앞에 있는 문자 집합 혹은 문자가 n번 연속해서 일치하는지 확인합니다. 주의하셔야 할 부분은, 이상도 아니고 이하도 아닌 정확히 n개만을 찾는다는 겁니다. 예를 들어서, [0-9]{3}는 숫자가 세자리로 연속되어야 일치한다는 것입니다. 만약 두자리라던가, 네자리라면 일치하지..
정규 표현식(Regex) 강좌 5편. 연속된 문자 찾기
정규 표현식(Regex) 강좌 5편. 연속된 문자 찾기
2012.12.211. + (문자가 하나 이상 있으면 일치) 지금까지 배운 정규 표현식을 사용하여 이메일 형식을 검색하고자 한다면, 어떤 방식으로 검색을 할 수 있을까요? 여태까지 배운 내용으로는 "a@b.c" 즉, \w@\w\.\w 라고 만들 수 있겠습니다. 그러면, "abc@def.ghi", "abcd@efgh.ijk" 같은 연속된 문자는 어떻게 검색을 할까요? 그것은 바로, 지금 배우게 될 +란 메타 문자로 해결할 수 있습니다. Reg. Expression:\w+@\w+\.\w+Text:id@gmail.comid@daumnetid@naver.comid@nate.comid@google 정규 표현식을 차례대로 살펴보도록 합시다. \w는 즉, [a-zA-Z0-9_], 그리고 그 다음 등장하는 메타 문자 +는 문자가 하나 ..
정규 표현식(Regex) 강좌 4편. 메타 문자(meta character)
정규 표현식(Regex) 강좌 4편. 메타 문자(meta character)
2012.12.201. 메타 문자(meta character) 정규 표현식에서의 메타 문자(meta character)는 특별한 존재입니다. 메타 문자 그 자체는 특별한 녀석이며, 이미 사전에 약속되어진 문자를 뜻합니다. (특수한 문자나 다름이 없음) 사전에 약속된 문자이기에, 메타 문자는 그대로 쓸 수 없으며 만약 문자로 쓰려면 역슬래시(\)를 하나 더 덧붙여 주어야 합니다. 아래 표를 한번 보도록 합시다. 메타 문자 설명 \v 수직 탭 \n 개행 \f 폼 피드 \r 캐리지 리턴 \t 탭 [\b] 백스페이스 \d [0-9]와 동일한 기능 \D [^0-9]와 동일한 기능 \w [a-zA-Z0-9_]와 동일한 기능 \W [^a-zA-Z0-9_]와 동일한 기능 \s[\f\n\r\t\v]와 동일한 기능 \S [^\f\n\r\t..
정규 표현식(Regex) 강좌 3편. 문자 집합(character set)
정규 표현식(Regex) 강좌 3편. 문자 집합(character set)
2012.12.191. 문자 집합(character set) 이번에는 어떤 문자든 통하는 . 문자와는 달리, 대괄호([])를 사용하여 문자 집합을 표현해보도록 할 것입니다. 문자 집합의 예를 한번 살펴보고, 문자 집합이 어떤 것인지 한번 생각해봅시다. Reg. Expression:f[ie]Text:fire siren female finally apple airport 위에 쓰인 정규 표현식을 보자면 대괄호로 둘러싸인 i와 e를 한번 보도록 합시다. 여기서 i와 e를 같이 생각하시면 안됩니다. "f 다음에 i 혹은 e라는 문자가 등장하는 경우에" 일치합니다. 즉, 문자 집합 중 하나가 일치해야 하는거죠. 이번에는, 문자 집합의 범위를 사용하여 검색을 해보도록 해봅시다. Reg. Expression:...[0123456789..
정규 표현식(Regex) 강좌 2편. 간단한 문자열 찾기
정규 표현식(Regex) 강좌 2편. 간단한 문자열 찾기
2012.12.191. 간단한 문자열 찾기 이번에는 평범한 텍스트를 이용해서 검색을 해보도록 하겠습니다. (평범한 텍스트도 정규 표현식이 될 수 있음) 아래를 한번 보도록 합시다. Reg. Expression:TextText:ABCText Text ITextyioTextm Textll abcdety 그리고 한번, Text에 있는 "Text"의 'T'를 대문자가 아닌 소문자로 바꾸어 결과를 확인해봅시다. 대소문자를 구분하지 않고 text도, Text도 검색이 되는 것을 확인하실 수 있습니다. (VB6 같은 경우는 IgnoreCase라고 해서 대소문자 무시를 활성화 시킬수 있고, 비활성화 시키는 것도 할 수 있습니다. 다른 언어도 마찬가지로 존재합니다.) 이번에는, 그대로의 텍스트가 아닌 모르는 문자까지도 찾을 수 있는 방법..
정규 표현식(Regex) 강좌 1편. 소개
정규 표현식(Regex) 강좌 1편. 소개
2012.12.191. 정규 표현식(Regular Expression, Regex)란 무엇인가? 오랜만에 강좌를 시작해보는듯 합니다. 시험기간에 밀려 블로그에 포스팅을 하지 못했는데, 이제야 글을 쓰게 되네요. 잡담은 여기서 멈추고, 본론으로 들어가도록 하겠습니다. 혹시 정규 표현식(Regular Expression, Regex)라고 들어보신적이 있으신가요? 이 정규 표현식은 텍스트를 검색하거나, 혹은 치환하거나 어떠한 문자열을 추출하고자 할때 주로 쓰이는 녀석입니다. 간단히 말하자면, 메타 문자(특수한 문자/기호)를 이용하여 이루어진 패턴을 말합니다. 정규 표현식을 사용하면, 패턴(pattern)을 통해 세밀하게 문자열을 찾아낼 수 있습니다. 아래와 같이 말이죠. 패턴(Pattern):https?://[\w./]+텍스트..
API 탐방 6편. 자신의 위치를 얻어오는 GetCurrentDirectory, GetModuleFileName
API 탐방 6편. 자신의 위치를 얻어오는 GetCurrentDirectory, GetModuleFileName
2012.11.18[API 탐방] 자신의 위치를 얻어오는 GetCurrentDirectory, GetModuleFileName 실행중인 파일의 현재 작업 디렉토리를 얻어오는 GetCurrentDirectory API부터 알아보도록 하겠습니다. 아래는 GetCurrentDirectory API 함수의 원형입니다. DWORD WINAPI GetCurrentDirectory(DWORD nBufferLength, LPTSTR IpBuffer) 첫번째 인수를 살펴보면 현재 작업 디렉토리의 경로가 들어갈 버퍼의 길이, 두번째 인수로는 현재 작업 디렉토리 경로를 받을 포인터가 옵니다. 반환값으로는 성공시, 작업 디렉토리 경로의 문자열 길이를 반환하며, 버퍼값이 모자랄경우 버퍼값이 반환됩니다. 실패시 0이 반환됩니다. 한번, GetCu..
C++ 강좌 17편. 예외 처리(Exception Handling)
C++ 강좌 17편. 예외 처리(Exception Handling)
2012.11.171. 예외 처리(Exception Handling) 예외 처리(Exception Handling)에서 예외(Exception)이란 프로그램 실행 도중에 일어나는 비정상적인 상황을 의미합니다. 이런 상황이 벌어질때, 이를 처리하는 과정을 예외 처리라고 합니다. 예를 들어서, 나눗셈 프로그램에서 사용자로부터 두 개의 정수를 입력받는데, 나누는 수를 0으로 입력한것과 같이 말이죠. 직접 그런 프로그램을 만들어 보도록 합시다. #include using namespace std; int main() { int a, b; cout > a >> b; cout
C++ 강좌 16편. 템플릿(Template)
C++ 강좌 16편. 템플릿(Template)
2012.11.171. 템플릿(Template)템플릿(Template)이란, 말 그대로 "형틀"이라는 의미를 지니고 있습니다. 무엇을 찍어내는 틀, 비유하자면 붕어빵 틀에 비유할 수 있습니다. 템플릿은 모양, 틀을 본을 떠 놓은것이고, 집어 넣는 재료에 따라 결과가 조금씩 달라집니다. 붕어빵 역시도, 재료만 가지고 똑같은 모양으로 찍어낼 수 있으며, 넣는 재료에 따라 내용물은 조금씩 달라집니다. 이 템플릿은, 기능은 이미 결정되어 있으나 자료형이 정해지지 않는다는 특징을 지니고 있습니다. 이제 함수 템플릿, 클래스 템플릿에 대해 알아보려고 하는데, 함수 템플릿(Function Template)은 말 그대로, 함수를 찍어내는 틀을 말합니다. 클래스 템플릿(Class Template)은 클래스를 찍어내는 템플릿이죠. 우선, ..
C++ 강좌 15편. 연산자 오버로딩(Operator Overloading)
C++ 강좌 15편. 연산자 오버로딩(Operator Overloading)
2012.11.161. 연산자 오버로딩(Operator Overloading)이번엔 함수 오버로딩, 생성자 오버로딩도 아닌 연산자 오버로딩입니다. 함수 오버로딩, 생성자 오버로딩은 함수명, 생성자명이 같으나, 인자의 자료형이나 수가 다른 함수의 선언을 허용하여 여러 기능을 가진 함수를 제공하는데, 연산자 오버로딩은 그렇다면 기존의 연산자 말고 다른 기능을 제공하는 연산자를 추가할 수 있는 것일까요? 우선 아래의 예제를 먼저 보도록 합시다.#include using namespace std; class NUMBOX { private: int num1, num2; public: NUMBOX(int num1, int num2) : num1(num1), num2(num2) { } void ShowNumber() { cout