Programing Langauge/swift
가독성 좋게 정규식 설계하기
Hamp
2025. 7. 22. 12:57
반응형
👋 들어가기 전
즐겨보는 유튜버 이도원님 영상 중 개네마리 1주년 영상이 있다.
1주년 영상 답게 영상 시간도 길고, 재밌는 부분을 많은 타임링크 형태로 남겨준다.


개발자면, 해당 타임링크는 일정 정규식으로 충분히 잡을 수 있다.
하지만 정규식 작성이 항상 어려웠던 이유는 바로 가독성이 너무 떨어진다는 점..
하지만 이번에 좋은 방법을 찾았다.
그 방법을 남겨보려고한다.
🏁 학습할 내용
- 타임링크 조건
- verbose 모드 적용
- verbose란
- 정규식에서 verbose
- 적용 후
- 결과
- 자주 쓸만한 정규식 패턴 모음
⏰ 타임링크 조건
- xxxx:xx:xx 형식
- 시간은 최대 4자리 (그 전에 숫자들 있으면 안됨)
- 분은 0 ~ 59분까지, 한 자릿수일 때 앞에 0은 optional
- 초 역시 분과 같음, 0 ~59초, 한자릿수일 때 앞에 0은 optional 이후 숫자들 있으면 안됨 (ex xxxx:xx:123)일때 ,
- xx:xx 형식
- `시`가 없음
- 분과 초 모두 xxxx:xx:xx 형식과 같음
- 초 뒤에 숫자들 있으면 안됨
swift로 작성하면 다음과 같다.
let pattern = #"(?<!\d)(\d{1,4}:(0?[0-9]|[1-5][0-9]):(0?[0-9]|[1-5][0-9])|(0?[0-9]|[1-5][0-9]):(0?[0-9]|[1-5][0-9]))(?!\d)"#
동작은 정확하지만, 한줄에 다 보이지도 않고 어지럽다..
한번 개선해보자.
✅ Verbose란
Verbose는 보통 함수나 명령어를 실행할 때, 상세한 정보를 출력하도록 설정하는 옵션이다.
📝 정규식에서 Verbose
정규식에서 verbose 스타일은 주석과 줄바꿈을 무시하게 만들어준다.
♻️ 적용 후
swift에서는 패턴안에서는 따로 지원하지 않지만, option을 이용해 사용할 수 있다.

- allowCommentsAndWhitespace: 주석 + 줄바꿈 무시
- caseInsensitive: 대소문자 구분 X
- Raw String Literal (#""#)로 변경해, \를 한번으로도 인식, (원래는 \\로 써야함)
let pattern = #"""
(?<!\d) # not preceded by a digit
(
\d{1,4} : # 1~4자리 시간
(0?[0-9]|[1-5][0-9]) : # 분 (0~59)
(0?[0-9]|[1-5][0-9]) # 초 (0~59)
|
(0?[0-9]|[1-5][0-9]) : # 분 (0~59)
(0?[0-9]|[1-5][0-9]) # 초 (0~59)
)
(?!\d) # not followed by a digit
"""#
guard let regex = try? NSRegularExpression(
pattern: pattern,
options: [.allowCommentsAndWhitespace, .caseInsensitive]
) else {
print("❌ pattern is wrong")
return false
}
🚀 결과

⭐️ 자주쓰는 정규식 모음
📧 이메일
private let pattern = #"""
^ # 문자열 시작
[A-Z0-9._%+-]+ # 영문/숫자/기호 허용
@ # @문자
(?:[A-Z0-9-]+\.)+ # 하나 이상의 도메인 (sub.domain.)
[A-Z]{2,} # 최상위도메인(TLD) 최소 2글자
$ # 문자열 끝
"""#
⏰ 타임링크
private let pattern = #"""
(?<!\d) # not preceded by a digit
(
\d{1,4} : # 1~4자리 시간
(0?[0-9]|[1-5][0-9]) : # 분 (0~59)
(0?[0-9]|[1-5][0-9]) # 초 (0~59)
|
(0?[0-9]|[1-5][0-9]) : # 분 (0~59)
(0?[0-9]|[1-5][0-9]) # 초 (0~59)
)
(?!\d) # not followed by a digit
"""#
출처
08-2 정규 표현식 시작하기
정규 표현식에서는 메타 문자(meta characters)를 사용한다. 먼저 메타 문자가 무엇인지 알아보자. [TOC] ## 정규 표현식의 기초, 메타 문자 메타 문자란 원…
wikidocs.net
반응형