Diana의 iOS 개발일기

[Swift] - 정규표현식(Regex) 본문

Swift/Swift

[Swift] - 정규표현식(Regex)

Diana_iOS 2022. 4. 10. 18:27

회사에서 회원가입 기능을 만들면서 정규표현식을 사용하고 있는데요.

다 됫다! 싶으면 튀어나오는 예외케이스 때문에 여간 골머리를 썪고있는게 아닙니다.

확실히 이해 없이 급하게 가져다 쓰니까 허점이 많은거 같더라구요.

고로 제대로 사용하고 싶기도 하고 미래에 정규식과 다시 마주할 제 자신의 당혹감을 줄여주고자 정리해보려고 합니다.

개념정리! 시작합니다!


 정규표현식(Regex)이란?

정규표현식, 즉 정규식은 패턴을 표현하기 위해서 생겨난 언어라고 합니다.

지금 제 경우에는 비밀번호를 체크할 때 연속된 숫자가 4개 이상 존재할 경우 불가능! 을 띄워주고 있는데요,

정규표현식을 사용하지 않으면 "0000", "1111", "2222",,,,"9999"를 모두 체크해주어야겠죠?

하지만 정규표현식을 사용하면 (\\d)\\1\\1\\1 또는 (\\d)\\1{3,}로 패턴 체크가 가능해집니다. 간단해졌죠?

 

정규표현식 문법

메타 문자 사용 예시 결과 설명
. .a aa, ba, xa, cba,  1개의 문자와 일치합니다.
예시의 경우 앞에 한글자는 무엇이든 상관 없이 뒤에 a만 붙어있으면 됩니다.
^ ^a abc, apple 시작표시
첫 글자가 해당 글자로 시작해야 매칭이 됩니다.
$ a$ a, eba, edba 끝표시
해당 문자가 문자열의 맨 끝에 존재해야 매칭됩니다.
[] [abc] aoo, bee, cat 문자열 셋
[abc]의 경우 문자열에 a, b, c중 하나라도 존재하면 매칭이 됩니다.
추가로 []안에 ^가 들어가면 []안에 있는 문자열을 제외한 글자들과 매칭이 됩니다.
* ab*e abe, abbe 0번 이상 반복
*의 바로 앞에 있는 문자가 반복되어도 매칭이 됩니다.
{} [abc]{3,5} aa(매칭X)
abccab(빨간부분만 매칭)
abccaabcc(2번 매칭)
횟수 표시
[abc]는 문자열에 a, b, c중 하나만 있어도 매칭이 된다고 했죠?
이제 그 뒤에 {3,5}이 붙음으로써 최소 3개, 최대 5까지의 반복을 허용합니다.
{3,}와 같이 뒤에 숫자가 부재한 경우는 3개 이상 반복 가능을 의미합니다.

 

자주 사용하는 정규표현식

1. [a-z]

문자열 내에 영문 소문자 존재 시 매칭이 됩니다.

 

2. [A-Z]

문자열 내에 영문 대문자 존재 시 매칭이 됩니다.

 

3. [0-9]

문자열 내에 숫자가 존재 시 매칭이 됩니다.

 

4. [~!@#$%^&*]

문자열 내에 해당 특수문자가 존재 시 매칭이 됩니다.

만약 안에 ~!@#$만 되어있다면 %은 매칭이 되지 않아요.

 

해당 표현들은 함께 사용도 가능해요. 다들 실제로 관심있는 부분인 바로 여기부터죠?

바로 응용을 해봅시다.

 

정규 표현식 간단한 응용

1. ^[a-zA-z0-9]*$

일단 문자열 내부에는 영어 소문자, 대문자, 숫자 중 어느 것이든 하나 존재하면 매칭이 된다고 하네요.

그리고 앞에 ^가 있는걸 보니 시작을 소문자, 대문자, 숫자 중 하나로 시작해야해요.

그리고 뒤에 *가 붙어 있는데 이는 {0,}와 동일해요! 문자들을 0번이상 반복이 가능하다는 의미죠.

$는 문자열의 끝임을 나타냅니다.

ex) abbee, aAdee033, Aeew3, 33, A

 

이때 *을 빼면? 반복이 안되고 시작과 끝이 정해져있으니까 한글자만 매칭이 되겠죠?

ex) a, A, e, 3

 

2. [A-Z0-9~!@#$%^&*]$

시작이 뭐든 다 관심이 없대요! 그냥 마지막만 괄호안의 문자 중 하나면 된다네요.

ex) swift!, sWifT, sdaev*

 

3. ^01([0-9])([0-9]{3,4})([0-9]{4})$

해당 정규식은 전화번호 규칙을 나타내는 정규식인데요.

시작은 01로 시작하고 그 다음에 숫자 하나,

그리고 그 다음엔 3~4자리의 숫자, 마지막으로 숫자 4자리로 끝나는 경우 매칭이 됩니다.

여기서 ()의 경우는 문자를 묶음처리해줘요. (.)의 경우는 임의의 문자를 의미하구요.

 

정규표현식 테스트 사이트

정규표현식은 확실히 직접 사용해보면서 해야 이해가 더 쉬운거 같아서 유명한 테스트 사이트를 같이 올려놓을게요.

https://regexr.com/

 

RegExr: Learn, Build, & Test RegEx

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

regexr.com

 

해당 글에서 소개된 정규식 응용들 외에도 다양한 응용들이 존재하는데요.

바로 다음글에서 비밀번호 생성시 사용되는 정규표현식을 다뤄보며 내용을 추가해볼까 합니다!