본문 바로가기

프론트엔드 👩🏻‍💻

정규표현식 메타 문자 정리 ✨

 

 

출처: 준재님 메타문자 정리 쓰윽~

 

GitHub - bear-bear-bear/learning-regExp: 정규 표현식 학습

정규 표현식 학습. Contribute to bear-bear-bear/learning-regExp development by creating an account on GitHub.

github.com

 

⭐️ 정규표현식의 메타 문자

- 자체적인 의미를 가지지 않고 특별한 방식으로 해석

- 대괄호 안에서 쓰임

 

✨ /

- 보통 패턴의 시작과 끝

 

✨ . (아무 문자)

- 온점(.)은 어떠한 단일 문자와도 매치되지만 리턴 혹은 개행 문자와는 매치 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) heT또는 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 ] * $/

 

✅ 한글만 입력 유효성 검사 정규표현식

/ [ㄱ-힣] /

 

✅ 한글, 특수문자만 입력

/^ [ㄱ-힣\{\}\[\]\/?.,;:|\)*~`!^\-_+<>@\#$%&\\\=\(\'\" ]* $/