문법
문자
- a: 문자 "a"와 정확히 일치.
- [abc]: 문자 "a", "b", "c" 중 하나와 일치.
- [^abc]: 문자 "a", "b", "c" 이외의 문자와 일치.
메타 문자
- .: 어떤 문자와 일치. (줄바꿈 문자 제외)
- ^: 문자열의 시작을 나타냄.
- $: 문자열의 끝을 나타냄.
- \b: 단어 경계를 나타냄.
- \d: 숫자와 일치.
- \D: 숫자가 아닌 문자와 일치.
- \w: 알파벳 문자나 숫자와 일치.
- \W: 알파벳 문자나 숫자가 아닌 문자와 일치.
- \s: 공백 문자와 일치.
- \S: 공백 문자가 아닌 문자와 일치.
수량자
- *: 0개 이상의 문자와 일치.
- +: 1개 이상의 문자와 일치.
- ?: 0개 또는 1개의 문자와 일치.
- {n}: n개의 연속된 문자와 일치.
- {n,}: 최소 n개 이상의 연속된 문자와 일치.
- {n,m}: 최소 n개 이상, 최대 m개의 연속된 문자와 일치.
그룹화
- (abc): "abc"와 일치하는 그룹을 형성.
- |: or 연산자로, 주어진 문자열 중 하나와 일치.
이스케이프
- \: 다음 문자를 이스케이프.
- 예를 들어 .는 실제 점 문자와 일치.
휴대폰 번호
phone_number_regex = re.compile(r"^01[016789]\d{7,8}$")
- 파이썬에서 이스케이프 문자인 (백슬래시)를 이용하려면 앞에 백슬래시 하나 더 써서 \ 이런식으로 써야함.
- 하지만 시작하기 전에 r(raw string)을 명시해주면 백슬래시를 이스케이프 문자로 해석하지 않고 문자 그대로 해석함.
- ^01[016789]
- ^은 문자열의 시작을 나타냄. 즉, 01로 시작한다는 뜻
- [] 이건 그 안에 문자중 하나와 일치해야한다는 뜻. 즉, 01 다음에 0, 1, 6, 7, 8, 9 중 하나가 나와야함.
- 010, 011, 016, 017, 018, 019
- \d는 숫자와 일치해야 한다는 뜻.
- 왜 앞에 010 이런걸 \d로 안썻냐면, 특정 숫자를 가리켜야 하기 때문인데, \d는 전체 숫자를 뜻함.
- \d{7,8}$
- {n,m}은 최소 n개 이상, 최대 m개의 연속된 문자와 일치.
- 즉 숫자인데, 최소 7개에서 8개의 숫자로 이루어져야함.
- $는 문자열의 끝을 나타냄.
010, 011, 016, 017, 018, 019 중 하나로 시작을 하고, 뒤에는 7 ~ 8 자리의 숫자들로 이루어진 핸드폰 번호 정규식이다
비밀번호
password_regex = re.compile(
"^(?=.*[A-Za-z])(?=.*\d)(?=.*[$@$!%*#?&])[A-Za-z\d$@$!%*#?&]{8,}$"
)
- "^(?=.[A-Za-z])(?=.\d)(?=.[@!%#?&])[A-Za-z\d@!%*#?&]{8,}$": 이 패턴은 다음 조건을 충족하는 비밀번호를 나타냅니다.
- ?=.*은 전방탐색. 즉, 현재 위치에서 뒤에 나오는 조건에 일치하는 부분을 탐색해준다.
- ()는 안에 써있는 조건을 만족하는 그룹을 형성해줌. 즉, 여러 조건을 가진 정규식 조건을 걸고 싶을 때 그룹화 하는 것.
- []는 안에 있는 조건을 만족.
- ^
- (?=.*[A-Za-z])
- [A-Za-z]는 대문자 소문자 상관없이 모든 알파벳이 나와야 함.
- 즉, 무조건 알파벳을 무조건 포함하는 그룹(조건).
- (?=.*\d)
- 최소한 하나의 숫자가 있어야 함을 나타내는 그룹(조건).
- (?=.[@!%#?&])
- 최소한 하나의 특수 문자($, @, !, %, *, #, ?, &)가 있어야 함을 나타내는 그룹(조건).
- [A-Za-z\d@!%*#?&]{8,}
- 알파벳, 숫자, 특수 문자 중 하나 이상을 포함하여 총 8자리 이상이어야 함을 나타냄.
- 앞선 그룹들과 조건이 중복되었는데, 조건을 더 강화하고 조금 더 정확한 비밀번호 유효성 검사를 수행하기 위함.
- 그리고 적어도 이러한 조건들을 충족하면서 8글자 이상을 만족해야한다는 뜻.
즉, 대소문자 중 적어도 하나의 알파벳을 포함하고, 숫자를 포함하고, 특수문자를 포함하고, 이러한 세 조건을 전부 충족하면서 최소 8 글자 이상을 만족하는 정규 표현식이다.