ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 정규표현식
    Web Programming 2020. 10. 27. 10:01
    반응형

     

    정규표현식(Regular expression) : 텍스트에서 특정 패턴을 찾아내는데 사용되는 문자 혹은 기호의 집합

     

    웹을 공부하다보면 ID 혹은 E-mail 검증에 자주 등장하는 것이 정규표현식(이하, 정규식)이다. 정규식은 문자열 내부의 텍스트 대체, 포맷의 유효성 검사, 패턴 매칭을 기반으로하는 문자열에서 특정 텍스트를 추출하는 등의 목적을 위해 사용된다. 식의 모양이 난해해 어렵다 생각할 수 있으나 조금만 익숙해지면 텍스트 처리에서 많은 역할을 수행한다.

     

    위 사진과 같이 시작, 종료기호가 "/"로 표시되고 내부에는 패턴이, 끝에는 플래그가 붙어 정규식이 완성된다. 직접 몇가지 정규식을 작성해보며 공부해보자.

     

    다음은 정규식 연습에 유용한 사이트다.

    https://regexr.com

     

    https://regexper.com/

     

    Regexper

     

    regexper.com

     

    RegExr: Learn, Build, & Test RegEx

    RegExr is an online tool to learn, build, & test Regular Expressions (RegEx / RegExp).

    regexr.com

     

    정규식에서 사용되는 표현식은 다음과 같다.

    문자 활용
    ^ default : 문자열의 시작이 ^ 뒤의 조건일때만 추출
    [ ] 내부 : [ ] 내의 값이 아닌 값만을 추출
    ex) ^R : RegExr
    ex) [^0-9] : fkfdnvi
    $ 문자열의 끝이 $ 앞의 조건일때만 추출
    ex) s.$ : Patterns.
    [ ] [ ] 내부의 문자가 하나라도 포함되면 추출
    ex) [0-9] : 12345
    * ~이 0개 이상인 문자열을 추출
    ex) abc* : ab, abc
    + ~이 1개 이상인 문자열을 추출
    ex) abc+ : abc
    ? ~이 0개 또는 1개 이상인 문자열을 추출
    ex) 10? : 1, 10
    {n, m} ~이 n개 이상 m개 이하인 문자열을 추출
    ex) s{3,5} : sss
    \b 띄어쓰기, 탭, 줄 바꿈, 쉼표, 마침표 등의 특수문자에 해당
    ex) \bHello\b : *Hello*
    (한글도 가능한 걸로 봐서는 유니코드 상의 특정 범위 외부를 의미하는 걸로 보인다.)
    \B \b의 값에 해당되지 않는 모든 값을 의미
    ex) \Bello\B : Hello
    \s 띄어쓰기, 탭에 해당
    ex) \sWorld :  World
    \S \s에 해당되지 않는 모든 값을 의미
    ex) \SWorld : RWorld
    \d 숫자에 해당([0-9]와 동일)
    ex) \dy\d : 1y1
    \D \d에 해당하지 않는 모든 값을 의미
    ex) \Dy\D : eye
    \w 알파벳, 숫자, "_" 와 같이 단어를 만들 수 있는 값을 의미
    ex) \wy\w : _y_
    \W \w에 해당하지 않는 모든 값을 의미
    ex) \Wy\W : -y-
    \ 정규식에 사용되는 문자를 그대로 쓰고 싶을때 사용
    ex) \*\\ : *\
    . 임의의 문자 1개에 대응
    ex) .e. : bee
    ?= 전방 탐색을 하여 해당되는 문자열 추출
    ex) ?=:// : http://tistory.com
    ?<= 후방 탐색을 하여 해당되는 문자열 추출
    ex) ?<=:// : http://tistory.com

     

     

    이메일 형식을 추출하는 정규식

    /\w+@\w+\.\w+/g

    전화번호 형식을 추출하는 정규식

    /\d{3}-\d{4}-\d{4}/g

    안전한 비밀번호 양식

     

    1. 비밀번호는 8자리 이상

    2. 숫자, 소문자, 대문자, 특수문자(`,!,@,#,$,%,^)가 최소 한개씩 포함

    /(?=^.{8,}$)(?=^.*\d+.*$)(?=^.*[`|!|@|#|$|%|\^]+.*$)(?=^.*[A-Z]+.*$)(?=^.*[a-z]+.*$).*$/g

     

    소괄호를 통해 조건식을 구분해준다. 하나씩 살펴보자.

     

    총 자릿수가 8자리 이상

    (?=^.{8,}$)

     

    숫자가 적어도 1개 이상이 포함

    (?=^.*\d+.*$)

     

    `, !, @, #, $, %, ^ 중 적어도 1개 이상이 포함

    (?=^.*[`|!|@|#|$|%|\^]+.*$)

     

    대문자 중 적어도 1개 이상이 포함

    (?=^.*[A-Z]+.*$)

     

    소문자 중 적어도 1개 이상이 포함

    (?=^.*[a-z]+.*$)

     

    어떤 문자로 끝나도 무관

    .*$

     

     

    가장 보편적으로 활용되는 정규식을 직접 작성해봄으로써 정규식에 대해 좀 더 자세하게 이해할 수 있었다.

    단순 유효성 검사 뿐만이 아닌 향후 코딩테스트 등에서도 유용할 것 같다.

    반응형

    'Web Programming' 카테고리의 다른 글

    log4j의 개념과 사용법  (0) 2021.01.08
    JDBC와 ODBC의 차이  (0) 2020.11.12
    http와 https의 차이  (0) 2020.09.25
    프로세스(Process)와 쓰레드(Thread), 멀티쓰레드(Multi-Thread)  (0) 2020.09.17
    3 Way-Handshake 란?  (0) 2020.09.16
Designed by Tistory.