Regex 정규표현식

less than 1 minute read

'Regex' = Regular-Expressions 정규표현식을 가끔 쓸 일이 있다.

개요

예를 들어 GUI에서 입력받고 싶은 형태가 숫자이거나 알파벳만 받고 싶다 등의 처리를 할 일이 종종 있다. 이 경우 막 if 문을 써가면서 숫자 체크하고 하는 것이 아니라 ‘정규 표현식’을 사용하면 된다.

docs

  • Example

      정수 표현 : 0|[1-9][0-9]*
      // 0 이거나 첫 숫자가 1~9로 시작하며, 뒤로는 0~9가 반복 됨
    

    Tip

  • Anchor: caret(^)과 $를 사용하며 regex를 적용할 string의 시작과 끝을 알려준다.

  • .*: 아무 문자나 개수도 0 이상의 개수.

  • ?=: Lookahead 쿼리 문자열의 직전까지 표현 해줌. ‘ad:123’의 .+(?=:)일 경우 ‘ad’가 얻어진다.

  • .*.*?의 차이: greedy / non-greedy로 전자는 끝까지 탐색하고 후자는 발견되는 즉시 스탑.

    Input = ‘aaaHelpmeHellpaaa’ \n, if regex ‘H.p’ then you will get ‘HelpmeHellp’ <- greedy if regex ‘H.?p’ then you will get ‘Help’ and ‘Hellp’ <- not greedy

Real Example

Password

var strongRegex = new RegExp("^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#\$%\^&\*])(?=.{8,})");

위 정규표현식을 해석해 보자.

Regex Description
^ Start Location을 알리는 ‘Anchor’
(?=.*[a-z]) 최소 하나 이상의 소문자 알파벳
(?=.*[A-Z]) 최소 하나 이상의 대문자 알파벳
(?=.*[0-9]) 최소 하나 이상의 숫자
(?=.*[!@#$%\^&*]) 다음 특수 기호 중에 하나 이상 포함
(?=.{8,}) 8자리 이상