본문 바로가기

Swift

[Swift] 정규식 (규식이)


 

 

문제 상황

 

알고리즘 테스트중 정규식을 만남. 그와의.. 첫만남..

이메일, 아이디, 비밀번호, 전화번호 등을 설정할 때 그들 나름의 규칙이 있습니다.  그 규칙들을 쉽게 표현할 수 있는 것이 정규식입니다.

 

아래는 이메일의 정규식입니다. (규식이...)

 

잘 모르겠죠? 네 저도 잘 몰랐습니다.. 같이 공부해요! 스크롤을 내려 보시죵!

 

 

 


 

 

해결 방법

 

제가 하나하나 정리를 하려고 했으나 아래의 블로그가 제가 읽은 수많은 블로그 중 이해가 제일 잘되는 곳입니다. 

 

evan-moon.github.io/2020/07/24/about-regular-expression/

 

불규칙 속에서 규칙을 찾아내는 정규표현식

개발자들은 자연어로 주어지는 문제 상황을 파악하고 프로그램을 설계하고 작성하는 사람들이다. 이런 업무를 수행하기 위해 개발자들은 불규칙하게 쏟아지는 정보들 속에서 필요한 부분들을

evan-moon.github.io

 

여기는 블로그를 보면서 공부할때 정규식을 바로 테스트하고 확인할 수 있는 사이트 입니다.

 

regexr.com/

 

RegExr: Learn, Build, & Test RegEx

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

regexr.com

 

 

Swift에서 사용하는 방법 

 

일단 저는 함수를 사용해서 Bool값을 리턴 해줬습니다.

 

1. strRegEx라는 String 프로퍼티에 정규식을 써줍니다.!! 

2. 그리고 NSPredicate 프로퍼티를 초기화시켜줍니다. foramt은 "SELF MATCHES %@"로 다들 쓰더라구요.. 왠지는 모르겠습니다. 댓글로 알려주세요!, 그리고 2번째 매개변수로 만들어준 정규식을 넣습니다.

3. NSPredicate 프로퍼티에서 evaluate(with: "검사할 문자열")을 넣으면 됩니다.

 

여러 예시로 공부해봅시다.!

 

이메일

 

앞서 본 이미지의 정규식을 알아 보겠습니다. /                       /       <- 이 사이가 정규식 이라고 생각하면 됩니다.!  

^ 문자열의 맨앞
[\w.%+\_] character는 word 단어들과 쓰여진 특수문자로 이루어져 있으면 된다.
+ 위의 character들이 1개 이상 존재
@ @ (골뱅이는 그냥 골뱅이)
[\w.\_] character 는 word 단어들과 . \ _ 로 중 하나면 된다.
+ 위의 character가 1개 이상이어야 한다.
\. . (\.은 그냥 .이다.  그냥 . 만하면 개행(\n)을 제외한 모든 character)
[A-Za-z] character는 영어면 된다.
{2,3} 위의 character는 2개에서 3개 여야한다.
$ 문자열의 끝

참 쉽죠? 저도 처음엔 어려웠는데 보니까 익숙해졌어요..

 

전화번호

 

^ 문자열의 시작
01 01은 그냥 01 
([0|1|6|7|8|9]) 0 or 1 or 6 or 7 or 8 or 9 중 하나의 character
-? -가 있어도 되고 없어도 됨
[0-9] 숫자인 character
{3,4} 위의 character가 3개에서 4개여야함
-? -가 있어도 되고 없어도 됨
[0-9] 숫자인 character
{4} 위의 character가 4개
$

 

글자수가 8이상 15이하

 

.만 그냥 쓰면 개행제외한 모든 character이고 그 character가 8~15개입니다.

 

5개이상 글자가 연속될 때

캡쳐를 하는건데 (\\w) 단어 하나를 캡쳐해서 그걸 계속 \1 복사해서 확인하는 것입니다.

 

스위프트에서 \는 \\로 해줘야합니다. ! 다른 글을 보고 혼돈 하지 말아야 해요!

 

문자열 안에 한글자가 5개 이상일때!!!

제가 생각한건데 실제로 되더라는..

단어를 하나 캡쳐하고 그사이에 .*을통해 값이 있어도 되고 없어도 되게 만들고 캡쳐한 단어를 다시 올립니다.. 4번 반복

 

 


 

 

정리

히히 마주친42앱의 아이디를 정규식으로 가려내게 해야겠습니다. ㅎ 

12345 이렇게 증가하는 값들도 정규식으로 잡고 싶었는데 함수를 이용해서 String값을 변경시키면 될 것 같습니다.  

 

 

 

 


'Swift' 카테고리의 다른 글

[Swift] First Class Type  (0) 2021.03.25
[Swift] Where, Switch, Binding  (0) 2021.03.24
[Swift] 콜렉션 타입 Collection Types  (1) 2021.03.15
[Swift] 상속 - rewind  (0) 2021.01.22
[Swift] 프로퍼티 감시자 - rewind  (0) 2021.01.22