일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Git과 Github차이점
- JSONSerialization
- 계산기
- flowchart
- github
- 순서도
- 플로우차트
- git이란
- 정규식
- Regex
- APNS
- git
- ios
- 플로우 차트
- swift
- OS
- PushNotification
- 정규표현식
- UIViewController
- 애플
- 백준
- 깃
- git사용법
- 깃허브
- xcode
- flow chart
- 흐름도
- GitvsGithub
- 스위프트
- github란
- Today
- Total
Diana의 iOS 개발일기
[Swift] - 정규표현식(Regex) 본문
회사에서 회원가입 기능을 만들면서 정규표현식을 사용하고 있는데요.
다 됫다! 싶으면 튀어나오는 예외케이스 때문에 여간 골머리를 썪고있는게 아닙니다.
확실히 이해 없이 급하게 가져다 쓰니까 허점이 많은거 같더라구요.
고로 제대로 사용하고 싶기도 하고 미래에 정규식과 다시 마주할 제 자신의 당혹감을 줄여주고자 정리해보려고 합니다.
개념정리! 시작합니다!
정규표현식(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자리로 끝나는 경우 매칭이 됩니다.
여기서 ()의 경우는 문자를 묶음처리해줘요. (.)의 경우는 임의의 문자를 의미하구요.
정규표현식 테스트 사이트
정규표현식은 확실히 직접 사용해보면서 해야 이해가 더 쉬운거 같아서 유명한 테스트 사이트를 같이 올려놓을게요.
해당 글에서 소개된 정규식 응용들 외에도 다양한 응용들이 존재하는데요.
바로 다음글에서 비밀번호 생성시 사용되는 정규표현식을 다뤄보며 내용을 추가해볼까 합니다!
'Swift > Swift' 카테고리의 다른 글
[Swift 정리] - CustomStringConvertible (1) | 2021.09.07 |
---|---|
[swift 함수정리] - JSONSerialization 클래스 (1) | 2021.05.06 |
[swift 함수정리] - NSExpression, replacingOccurrences 등 (0) | 2021.04.18 |