정규표현식 개요


정규표현식을 공부하기에 앞서 정규표현식이란 무엇이고 왜 공부하는게 좋은지 조금 동기부여를 해볼 필요가 있다. 


정규표현식이란 무엇일까? 간단하게 정의하면 다음과 같다


정규표현식문자열의 집합을 표현하는 데 사용하는 형식 언어이다.


정규표현식문자열집합이라는 형태로 다루는 형식 언어이기 때문에, 단순히 몇몇 프로그램이나 vim에서 일시적으로 제공하는 도구가 아니다. 


형식 언어로 학문적인 틀을 갖추고 진지하게 연구되어 개발되었기 때문에 그 구현에 있어서 문법과 버전이 조금씩 다를 수는 있어도 그 본질이 크게 달라질 수는 없다. 그리고 대부분의 문법도 편의성 때문에 조금씩 다르게 적용되는 것 말고는 거의 유사한 것으로 알고 있다. 이 이야기는 정규표현식을 익혀놓으면 그것이 소프트웨어 개발이건, 텍스트 편집이건, 운영체제 운용이든 평생 유용하게 써먹을 수 있다는 이야기이다. 물론, 현재에도 정규표현식은 vim 뿐만 아니라 다양한 텍스트 에디터, Unix/Linux 계열의 애플리케이션소프트웨어 개발 등에서 폭넓게 사용되고 그 유용성을 인정받고 있다. 또한, 데이터 유효성 검사, 데이터 웹 스크랩핑, 문법 구현 등에서도 매우 유용하게 쓰이고 있다. 

 

처음 정규표현식을 접하게 되면 각종 기호와 문자가 복잡하게 얽혀있는 모습이 초보자에게 부담스럽게 다가오지만 유용하게 사용할 수준까지는 매우 쉽게 익힐 수 있고 익혀두면 정말 쓸 곳이 많고 유용하다. 다음이 사례를 보면 그 유용성을 느낄 수 있을 것이다. 

 

아래는 자바스크립트에서 전화번호를 입력받아서 그 전화번호가 올바른 형식으로 입력되었는지 확인하는 함수를 구현해본 것이다.


function phone(number) {

  if (number.length > 8 || number.length < 7) {

    return false;

  }

  var numFirst = number.substring(0, 3);

  var numSecond = number.substring(number.length - 4);

  if (isNaN(numFirst) || isNaN(numSecond)) {

    reuturn false;

  }

  if (number.length === 8) {

    return (number.charAt(3) === "-");

  }

  return true;

}


위의 함수는 꽤 간략하게 코드를 정리한 것이다. 하지만 정규표현식을 이용하면 이 코드가 다음과 같이 줄어든다.


function phone(number) {

  return number.match(/^\d{3}-?\d{4}$/);

}


내부 블록에 12줄로 작성된 함수가 마법처럼 1줄로 줄어들었다. 이처럼 정규표현식을 사용하면 문자열 관련 프로그래밍을 하거나 수만 줄의 코드에서 원하는 문구를 정확히 찾아내는 등 문자열 관련한 작업에서 압도적인 효율을 갖출 수 있게 된다.

 

Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


이번 Anki는 "정규표현식문자열의 집합을 표현하는 데 사용하는 형식 언어이다." 라는 구절만 공부합니다. 


027 vim의 정규표현식(1).apkg


vim에서 기준이 되는 모드는 명령(command) 모드이다. vim은 명령 모드에서 단축키로 빠르게 대부분의 일을 처리하지만 단축키로는 복잡한 명령을 내리는데 한계가 있기 때문에 복잡한 명령을 내릴 방법이 별도의 방법이 필요하다. 그 방법으로 vim명령 라인에 복잡한 명령을 직접 입력하는 방식을 선택했다.


명령 모드에서 콜론(:), 슬래쉬(/), 물음표(?) 키를 누르면 아래의 명령 라인에 명령어를 입력할 수 있게 된다아래의 사진은 명령 모드에서 콜론(:) 키를 누른 것으로 가장 하단에 콜론(:)이 입력되는 것을 확인할 수 있다. 이후에 눌려지는 키는 계속 그 줄에 입력이 되므로 명령 라인에 명령어를 입력할 수 있는 상태가 된다. 콜론(:)이 입력된 행(Row)을 명령 라인이라고 부른다. 명령 라인을 사용할 수 있는 상태를 명령라인 모드, Ex 모드 등으로 부르기도 한다.

 



앞서 본 vim  종료 명령도 이 명령 라인에 :q!를 입력한 것이다. 


:q!


슬래쉬(/) 키나 물음표(?) 키를 누르면 콜론(:)키와 마찬가지로 명령 라인에 슬래쉬(/) 키나 물음표(?) 키가 입력되면서 명령 라인을 사용할 수 있는 상태가 된다. 


슬래쉬(/) 키나 물음표(?) 키를 누른 후 찾으려는 패턴을 입력하면 패턴이 나오는 곳으로 커서가 이동하는데 슬래쉬(/) 키는 정방향(문서의 아래 방향) 탐색, 물음표(?) 키는 역방향(문서의 위 방향) 탐색이다슬래쉬(/) 키와 물음표(?)에 의한 탐색은 후에 패턴을 지정하는 정규 표현식(Regular Expression)과 함께 다시 논의하기로 한다.

 

명령 라인은 대부분 콜론(:) 키를 이용하여 vim 설정 명령, 파일 관련 명령편집기 명령 등 다양하고 복잡한 명령을 입력하는데 사용한다. 

 

명령 라인에서 다시 명령 모드로 돌아오려면 Esc 키를 누르면 된다. 물론, 명령어를 명령 라인에 입력하고 Enter를 치면 명령을 실행하고 명령 모드로 돌아온다.


팁: Esc 키는 키보드에서 조금 누르기 힘든 위치에 있다. 그래서 이것을 대체하는 키가 있는데 그것이 바로 <Ctrl+[> 키다. (< >로 묶인 키는 동시에 누른다. , Ctrl 키를 누른 상태에서 [ 키를 누른다.)



본 포스팅의 내용을 갈무리 하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


003 명령 라인(명령줄).apkg


문서는 Anki 2.0 유저 매뉴얼을 번역한 문서입니다.


기본적으로 구글 번역을 통해서 초벌을 번역하고 이를 수정하는 방식으로 번역했습니다. 


또한, 본문에 충실한 직역보다는 매뉴얼을 숙지하기 쉽도록 의역 위주로 번역하였습니다.


 


Anki 매뉴얼 전체 개요 페이지 가기




Browser

 

 

 

 Find and Replace(바꾸기)

 


 

브라우저에서 편집 바꾸기를 사용하면 선택한 카드의 텍스트를 바꿀 수 있다.

 

바꾸기는 특정 카드들을 대상으로 작업을 수행하므로 바꾸기 메뉴를 클릭하기 전에 카드 목록에 바꾸기할 카드들이 올라가 있어야 한다.

 

 

 

바꾸기를 클릭하면 바꾸기를 수행할 수 있는 대화상자가 아래와 같이 나타난다.

 

 

 

바꾸기 대화상자에 나타난 정규식으로 취급 옵션을 사용하면 복잡한 대체 작업을 수행 할 수 있다.

 

예를 들어 카드에 다음과 같은 텍스트가 있는 경우를 상정해보자.

 

       <img src="pic.jpg">


 

그러면 다음의 문장을 찾아

 

        <img src="(.+)">


 

다음의 정규식으로 대체하면

 

     \1

 

카드는 다음과 같이 변한다.

 

          pic.jpg

 

 

정규식에 대한 전체 논의를 다루는 것은 이 문서의 범위를 벗어난다.

 

웹을 둘러보면 쓸만한 튜토리얼이 많이 있으니 이를 참조하는 것이 좋다.

 

Anki가 사용하는 특정한 방식은 http://docs.python.org/library/re.html을 참조하면 된다.

 

 

 

 

Anki 매뉴얼 전체 개요 페이지 가기



+ Recent posts