Regex 정규표현식
'Regex' = Regular-Expressions
정규표현식을 가끔 쓸 일이 있다.
개요
예를 들어 GUI에서 입력받고 싶은 형태가 숫자이거나 알파벳만 받고 싶다 등의 처리를 할 일이 종종 있다. 이 경우 막 if 문을 써가면서 숫자 체크하고 하는 것이 아니라 ‘정규 표현식’을 사용하면 된다.
-
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자리 이상 |