정규표현식(Swift)

2023. 1. 29. 21:13Swift

반응형

정규표현식(Regular Expression)

  • 문자열에서 원하는 부분, 혹은 패턴을 탐색하기위한 방법
  • 프로그래밍 언어마다 다르지 않으며, 정규표현식 자체의 문법에 따른다.

정규표현식의 구성

메타문자(Meta Character)

  • 메타문자는 문자의 본연의 의미를 가지기 보다는 하나의 문법이다.
  • 정규문자가 반복되거나 포함되는 등등의 문법을 나타내기 위해 사용
  • ., *, +, ?, ^, $, {, }, |, [, ], \등이 메타문자에 포함된다.

정규문자(Regular Character)

  • 문자 본연의 의미를 가지는 문자이다.
  • 만약 메타문자 중에서 정규문자로 사용하고 싶은 문자가 있다면 \(역슬래쉬)를 사용함으로 나타낼 수 있다.

정규표현식이 문자에 일치하는 지 확인

Apple Developer Documentation - NSString.CompareOptions
Apple Developer Documentation-String.range(of:options:)

let target = "HelloMyNameIsLeon"
let regularExpression = "^H"    // 첫 글자가 "H"로 시작하는지

if target.range(of: regularExpression, options: .regularExpression) != nil {
    print("정규식과 일치")
} else {
    print("정규식과 불일치")
}
// print 정규식과 일치
  • range의 정규식 옵션을 사용하여 해당 정규식을 사용하였을 때 불일치 한다면 반환값으로 nil이 나오므로 nil여부를 확인하여 일치하는지 확인할 수 있다.

정규표현식이 일치한 부분 확인

let target = "2532"
let regularExpression = "[0-9]*"    // 숫자가 연속으로 포함되는지

if let targetIndex = target.range(of: regularExpression, options: .regularExpression) {
    print(target[targetIndex])
} else {
    print("정규식과 불일치")
}
// print 2532
  • String의 range메소드는 옵셔널 타입으로 반환되므로 해당 옵셔널을 풀어준다면 subscript문법으로 해당 index의 내용을 확인할 수 있다.

정규식 활용법(핸드폰 번호)

let target = "01012341245"
let regularExpression = "^010[0-9]{8}$"

if let targetIndex = target.range(of: regularExpression, options: .regularExpression) {
    print("정규식과 일치")
    print("휴대폰번호 - \(target[targetIndex])")
} else {
    print("정규식과 불일치")
}
// print 정규식과 일치
// print 01012341245
  • 초기 시작은 “^010”으로 확인하며, [0-9]로 숫자인지를 확인한다
  • {8}로 010이후 숫자들이 8개인지를 확인한다
  • $는 문자열의 종료를 의미한다
let target = "010-1234-1245"
let regularExpression = "^010\\-([0-9]{4})\\-([0-9]{4})"
  • “-“하이폰을 넣어주기 위해서 \\를 사용하여 정규식에 포함시킨다
  • 또한 괄호를 넣고 [0-9]를 통해 숫자와 {4}를 통해 4개만의 숫자를 쓸 수 있도록 만들었다.
let expression = "^010(-[0-9]{4}){2}"
  • 위와 같이 -(하이폰)과 4개의 숫자가 2번 반복되는지 확인 할 수 있다

정규식 활용법(이메일)

let target = "leonFather17@naver.com"
let expression = "[A-Z0-9a-z]+@[A-Za-z0-9]+\\.[a-z]{2,3}$"

if let targetIndex = target.range(of: expression, options: .regularExpression) {
    print("정규식과 일치 - \(target[targetIndex])")
} else {
    print("정규식과 불일치")
}
// print 정규식과 일치 - leonFather17@naver.com
  • 정규표현식은 소문자와 대문자를 따로 구별해줘야한다.
  • [A-Z0-9a-z]는 소문자와 대문자 알파벳 및 숫자인지를 확인한다.
  • @ 뒤에도 역시 소문자와 대문자 알파벳 숫자를 확인한다.
  • 이후 .(dot) 뒤에 com, net이 들어가는지 확인하며 2자 이상 3자 이하인지를 확인한다.
반응형

'Swift' 카테고리의 다른 글

Swift 컴파일, 컴파일러  (0) 2023.02.14
ARC-간단정리  (0) 2023.02.07
Closures 간단 정리  (2) 2023.02.06
KVC(Key-value coding), KVO(Key-value observing)  (0) 2023.01.22
Opaque Types(불투명 타입) 간단하게 훑어보기  (0) 2023.01.21