출처: 준재님 메타문자 정리 쓰윽~
⭐️ 정규표현식의 메타 문자
- 자체적인 의미를 가지지 않고 특별한 방식으로 해석
- 대괄호 안에서 쓰임
✨ /
- 보통 패턴의 시작과 끝
✨ . (아무 문자)
- 온점(.)은 어떠한 단일 문자와도 매치되지만 리턴 혹은 개행 문자와는 매치 X
- 예를 들어, .ar은 어떤 단일 문자 다음에 a가 오고, r이 오는 패턴
- ".ar" -> The car parked in th garbage.
✨ [ ] (문자 집합)
- 문자 클래스, 문자 집합 명시
- 문자열 집합 내에 사용된 하이픈(-)은 문자들의 범위를 지정
- 대괄호 내부에 명시된 문자들의 순서는 중요하지 않음.
- 예를 들어, [Tt]he는 대문자 T 혹은 t가 나온 다음, 문자 h가 나오고 그 뒤에 e가 나오는 패턴
- "[Tt]he" -> The car parked in the garbage
✨ [^ ] (부정)
- 부정 문자 집합
- 캐럿 기로(^)는 문자열의 시작지점을 나타내지만, 왼쪽 대괄호 바로 뒤에 위치했을 때 문자 집합의 부점
- 예를 들어, [^c]ar은 문자 c를 제외한 어떤 문자 뒤에 a가 나오고, 그 뒤에 r이 오는 패턴
- '[^c]ar' -> The car parked in the garbage.
✨ *
- * 부호는 부호 앞에 위치한 매처(matcher)가 0번 이상 반복된 문자열과 매치
- a*은 소문자 a가 0번이상 반복되는 패턴
- 별 부호가 문자 집합 직후에 나오는 경우에는 문자 집합 전체의 반복을 찾게 됨
- 예를 들어, [a-z]*은 소문자들이 갯수와 상관없이 연속으로 반복되는 패턴
- '[a-z]*' -> the car parked in the garbage #21
- 별 부호는 메타 문자 .와 함께 모든 문자열과 매치되는 패턴
- *부호는 공백( \s)와 함께 공백문자들과 이루어진 문자열과 매치되는 패턴을 만드는데 사용
- 예를 들어, \s*cat\s*는 0번 이상 공백문자가 나온 이후에 소문자 c, 소문자 a, 소문자 t가 자체로 나오고 그 뒤에 다시 0번 이상의 공백문자가 나오는 패턴
- "\scat\s" -> The fat cat sat on the concatenation.
✨ + (반복)
- + 부호는 부호 앞에 위치한 문자가 한번 이상 반복되는 패턴
- 예를 들어, 정규표현식 c.+t는 소문자 c가 나오고, 그 뒤에 한 개 이상 문자가 나온 후, 소문자 t가 나오는 패턴을 의미
- 여기서 문자 t는 해당 문장의 제일 마지막 글자 t라는 것
-"c.+t" -> The fat cat sat on the mat.
✨? (선택)
- 선택적으로 만드는 역할
- 예를 들어, [T]?he는 대문자 T가 선택적으로 나온 이후에, 그 뒤에 소문자 h, 그 뒤에 소문자 e가 나오는 패턴
✨{n, m} = {최소, 최대}
- 정량자라고도 불리는, 중괄호는 하나의 문자 혹은 문자 집합으로 표시된 문자가 몇번 이상 반복되는지 명시
- 예를 들어, [0-9]{2,3}은 숫자 문자(0부터 9 사이)가 최소 2번, 최대 3번 연속해서 나오는 문자열 패턴
-[0-9]{2,3} -> The number was 9.9997 but we rounded it off to 10.0.
- 두번째 숫자를 생략하는 것 가능
- 예를 들어, [0-9]{2,}은 2번 이상 숫자가 연속으로 나오는 패턴
- 만약 쉼표를 삭제하면, 정규표현식 [0-9]{3}은 숫자가 정확히 3번 연속해서 나오는 패턴
✨ (xyz)
- 캡처링 그룹은 괄호 (...) 안에 쓰여진 하위 패턴의 그룹
- 정규표현식에서 하나의 문자 뒤에 정량자를 넣는 경우에는 해당 문자의 반복
-하지만, 하나의 캡처링 그룹 뒤에 정량자를 넣는 경우에는 캡처링 그룹 전체의 반복
- (ab)*는 문자 "ab"가 0번 이상 반복되는 패턴
- 대안부호 | 또한 문자 그룹내부에서 사용 가능
- 예를 들어, (c|g|p)ar은 소문자 c, g, 혹은 p가 나온 이후에 a가 나오고 r이 나오는 패턴
- 캡처링 그룹은 부모 언어에서 사용하기 위해 문자를 일치시킬 뿐만 아니라 문자를 캡처한다는 의미도 가능
- 부모 언어는 파이썬/자바스크립트/함수 정의에서 정규 표현식을 구현하는 거의 모든 언어
✅ 논-캡처링 그룹
- 논-캡처링 그룹은 오직 문자열에 매칭되지만, 그룹을 캡처하지 않는 캡처링 그룹
-논-캡처링 그룹은 (...) 괄호 안에 ?:로 표시됨
-예를 들어, 정규식 (?:c|p|g)ar은 (c|p|g)ar와 같은 문자열을 매칭하는 것과 유사하지만 캡처링 그룹을 만들진 않음
- 논-캡처링 그룹은 찾기 및 변경 기능에서 사용, 캡처 그룹 함께 사용하여 다른 종류의 출력 생성 시 overview를 유지할 때 유용
✨ | (대안)
- 문자집합과의 차이점은 문자 집합은 문자 수준에서 동작하는 반면, 대안 부호는 표현식 수준에서 동장
- (T|t)he|car은 대문자 T 혹은 소문자 t가 나오고 문자 h, 문자 e가 차례로 나오거나 문자 c, 문자 a, 문자 r이 차례로 나오는 패턴
- (T|t)he|car -> The car is parked in the garbage.
✨ \ (문자 그 자체로)
- 백 슬래시는 이스케이핑하는데 사용
- 예약문자들인 {} [] \ / + * . $ ^ | ?를 메타부호가 아닌 문자 그자체로 매칭되도록
- 특수 문자 앞에
- (f|c|m)at\.?은 소문자 f 또는 c 또는 m 이후에 소문자 a와 t가 차례로 등장하고 이후에 문자 .가 선택적(?)으로 나타나는 패턴
- (f|c|m) at \. ? -> The fat cat sat on the mat.
✨ ^
- 캐럿 부호는 매칭 문자가 표현식의 시작
- ^a를 입력 문자열 abc에 적용하면, a를 매칭 결과값으로 내보냄.
-반면 정규표현식 ^b를 위의 입력 문자열에 적용하면 매칭 안됨
- abc에서는 'b'는 처음 시작 문자가 아니니까
-^ (T|t) he는 T또는 t가 입력문자열의 📌시작📌으로 나오고, 그 뒤에 문자 h와 문자 e가 차례로 나오는 패턴
✨$
- 달러부호
- 📌입력 문자열의 마지막 문자가📌 매칭문자로 끝나는지 확인하는데 사용
- a와 t 그리고 문자 .가 순서대로 입력 문자열의 맨 마지막에 나오는지 확인하는 매턴
- (at.) -> The fat cat. sat. on the mat.
-(at.) $ -> The fat cat. sat. on the mat. -> 여기서 온점(.)은 아무 문자열이나 와도 상관없다는 뜻
⭐️ 단축형 문자열 집합
- 문자열 집합들을 간편하게 사용할 수 있도록 여러 단축형들을 제공
- .(온점) : 개행(줄바꿈)을 제외한 모든 문자
- \w : 영숫자 문자와 매치: [a-zA-Z0-9]
- \d : 숫자와 매치 - [0-9]
- \D: 숫자가 아닌 문자와 매치 - [^\d]
- \s: 공백문자와 매치
-\S : 공백 문자가 아닌 문자와 매치 - [\^s]
⭐️전후방 탐색
- 후방탐색(Lookbehind)와 전방탐색(Lookhead)은 논-캡처링 그룹의 특정 종류
- 하나의 패턴
- 다른 특정 패턴 전이나 후에 나타나는 조건
- $4.44 and $10.88에 대해서 $ 이후에 나오는 모든 숫자를 매칭하고 싶다고 하자.
- (?<=\$)[0-9\.]*를 사용할 수 있다. $ 문자 뒤에 .를 포함한 모든 숫자 문자를 의미
- To be continued...
⭐️플래그
- 출력값을 수정하기 때문에 수정자(modifier)라고도 불림
- 어떤 순서 혹은 조합으로 사용 가능하며 정규표현식의 일부분
✨ i
- 수정자 i는 대소문자 구분없는 매칭 수행하는데 사용
- /the/gi는 대문자 T, 소문자 h, 소문자 e가 차례로 나오는 패턴
- 마지막 i 플래그가 정규표현식 엔진에게 대소문자 구분하지 않도록 알려줌
- g 플래그는 전체 입력 문자열 내부에서 패턴은 검색하기 위해 설정
-The -> The fat cat sat on the mat.
- / The /g i -> The fat cat sat on the mat.
✨ g
- 수정자 g는 첫번재 매칭 후에 멈추지 않고 계속해서 검색하는 전체 검색을 수행하는데 사용
- /. (at) /g는 개행을 제외한 문자가 나오고, 그 뒤에 소문자 a, 소문자 t가 나오는 패턴
- g 플래그를 정규표현식의 마지막에 설정했기 때문에, 이 패턴은 입력 문자열 전체에서 나타나는 모든 패턴을 찾는 것
- /. (at) / -> The fat cat sat on the mat.
- /.(at)/g -> The fat cat sat on the mat.
✨ m
- 수정자 m은 멀티 라인 매치를 수행하는데 사용
-앵커 (^, $)은 패턴의 시작과 끝을 확인하는데 사용.
- 근데 만약에 각라인마다 이 앵커가 동작하게 하고 싶다면 m 플래그를 설정하면 됨
- 예를 들어, /at(.)?$/gm은 소문자 a와 소문자 t가 차례로 나오고, 선택적으로 개행 제외한 문자가 나오는 패턴
- 여기서 플래그 m으로 인해서 정규표현식 엔진은 입력 문자열의 각 라인에 대해서 해당 패턴을 매칭하게 됨
- /.at(.)?$/ ->
The fat
cat sat
on the mat.
- /.at(.)?$/gm ->
The fat
cat sat
on the mat.
📚 예시
✅ 이메일 정규표현식:
/^ [A-z0-9] {2,20} + @ [A-z]{2, 20} + \. [a-z]{2,3} $/
✅ 휴대폰 번호 유효성 검사 정규표현식
\d {3} + - \d {3,4} + -\d {4}
- \d: 숫자와 매치
- {3}, {3, 4}, {4} : 문자열 3개, 문자열 3~4개, 문자열 4개
✅ 비밀번호 유효성 검사 정규표현식
/^(?=.*\d)(?=.*[a-zA-Z])[0-9a-zA-Z]
✅ 아이디 유효성 검사 정규표현식
/^ [a-z] + [a-z0-9] {5,19} $ /g
- /g 전체 검색
✅ 한글, 영문 유효성 검사 정규표현식
/^ [a-zA-Zㄱ-힣] [a-zA-Zㄱ-힣 ] * $/
✅ 영문 대문자, 소문자, 숫자, 문자 사이 공백 및 특수문자 -_/,. 유효성 검사 정규표현식
/^ [a-z A-Z 0-9 - _ /, .] [a-z A-Z 0-9 -_/,. ] * $/
✅ 영문 대문자, 소문자, 문자 사이 공백
/^ [a-z A-Z] [a-zA-Z ] * $/
✅ 한글만 입력 유효성 검사 정규표현식
/ [ㄱ-힣] /
✅ 한글, 특수문자만 입력
/^ [ㄱ-힣\{\}\[\]\/?.,;:|\)*~`!^\-_+<>@\#$%&\\\=\(\'\" ]* $/
'프론트엔드 👩🏻💻' 카테고리의 다른 글
[프론트엔드 언어 ] 프론트엔드 언어 정리 ✨ (React, Vue.js, Angular) (0) | 2024.02.14 |
---|---|
인증 방식 정리 ✨ (3) | 2024.01.21 |
OSI 7계층 정리 ✨ (0) | 2024.01.18 |
git 명령어 모음 (0) | 2024.01.12 |
HTTP 완벽 가이드(다람쥐 책) (1) | 2024.01.09 |