happygrammer

문자열 처리를 위한 정규식 사용방법 본문

문자열 처리를 위한 정규식 사용방법

정규식을 이용한 문자열 처리

매칭과 수량자(게으른 수량자), 경계찾기, 그룹핑에 대하여

2015-03-01

정규식을 사용해야하는 이유나 필요성에 대해서는 말을 하지 않아도 개발자 라면 너무나도 동감하고 있을것입니다. 정규식은 '문자열을 처리할 수 있는 훌륭한 도구'입니다. 그러나, 도구는 한번 사용하는 것으로 그치지 않고 많은 연습을 통해서 익혀집니다. 따라서, 단한번의 연습으로 정규식을 마스터한다는 생각을 버려야 한다고 생각합니다.


Regex Coach

정규식의 중요한 문법 몇가지를 알아보겠습니다. 이를 테스트 하기 위해 저는 The Regex Coach라는 프로그램을 이용하겠습니다. Regex Coach는 Freeware로 다운로드 가능합니다. [링크]



정규식은 특정 문자를 교체할때, 혹은 특정 문자열로 분리할때 ,특정 문자열을 찾을때에 사용할 수 있습니다. 3 가지 작업 모두 한가지 공통되는 작업이 있습니다. 바로 문자열을 대상으로 매칭한다는 것 입니다. 매칭은 다른말로, '찾기', '탐색'와 같은 말로 달리 사용할 수 있습니다.

매칭

매칭은 [] 대괄호를 통해서 OR 조건을 줄 수 있습니다. 가령 a부터 z까지의 문자를 모두 선택하려고하면, [a-z]라고 입력을 하면됩니다.

소문자 매칭 : a-z
대문자 매칭 : A-Z

가령 Regex Coache를 이용하면 다음과 같이 a에서 z까지의 문자를 매칭할 수 있습니다.




조건달기

이제 기본적인 매칭 방법을 넘어, 조건을 걸도록 하겠습니다. 조건을 달아보도록 하겠습니다. 제외하기 조건은 '^'를 이용합니다.

제외하기 : [^a-c] 

수량자 조건추가!

이제는 몇번 일치해보겠다라고 하는 수량조건을 추가해보겠습니다. 수량조건은 {}를 이용합니다. a에서 c까지 제외한 문자 3개선택은 다음과 같습니다.

[^a-c]{3}

입력과 출력의 예제를 살펴보겠습니다. 가령 [^a-c]에 해당하는 부정조건과 {3}, 즉 '3개'로 한정하는 수량조건을 주면 de만 선택되게 됩니다.






게으른 수량자

수량자의 변종인 게으른 수량자를 소개하려고 합니다. 이름이 게으른 수량자인 이유는 문자가 최소로 일치하기 때문입니다. 게으른수량자는 다음과 같은 것들이 있습니다.

*? , +? {n,}? 





이런 것들은 왜 게으른 수량자 일까요? 원래 대로 표시했다면 다음과 같이 표시되어야 합니다. (탐욕적 방법이라고 합니다)




그렇다면 탐욕적 방법과 게으른 수량자는 어떻게 다른것일까요? 저는 다음과 같이 정의해보았습니다.

게으른 수량자 : 게으른 수량자는 지정해준 것 처음과 마지막에 지정해준 것들이 반복했을때, 각각을 선택한다. 탐욕적 수량자 : 탐욕적 수량자는 지정해준 것 처음과 마지막에 오는 모든 문자열을 선택한다.

경계찾기

다음으로 경계를 찾도록 하겠습니다. 경계에 접해있는 문자는 스페이스바로 이루어진 '공백'과 맞닿아 문자를 의미합니다. 경계를 굳이 왜 찾아야하나요? 라고 물으신다면, 다음과 같은 화면을 보세요. 가령 " // This is comment"와 일치하려면, 굳이 경계를 줄 필요가 없습니다.




그러나, 이 상황은 다릅니다. 선택이 안되었습니다. 이유는 무엇일까요? 바로 첫번째 줄 다음에 개행이 일어났기 때문입니다. 





따라서, 다음과 같이 개행문자 \n를 포함해줍니다. 그러면 이상없이 다음줄 까지 포함되어 선택됨을 확인할 수 있습니다.



그룹핑

마지막으로 그룹핑에 대해서 알아보도록 하겠습니다. 그룹핑은 개개의 문자가 아닌, '단어'와 같은 문자열을 지정할때 사용합니다. 예를들면, 괄호안에 문자열이 들어가게 되고, 문자열이 1번 이상 반복(+)하여 선택하려면 다음과 같은 정규식을 입력합니다.

(문자열)+




'Dev > Regular Expression' 카테고리의 다른 글

문자열 처리를 위한 정규식 사용방법  (0) 2016.04.04
댓글쓰기 폼