@ 정규 표현식(Regular Expression)이란?
- 프로그래밍에서 문자열을 다룰 때, 문자열의 일정한 패턴을 표현하는 일종의 형식 언어.
- 정규식이라고도 부르며, 보통 RegEx 또는 RegExp라고 쓴다.
- 특정한 조건의 문자를 "검색, 추출, 치환"하는 과정을 매우 간편하게 처리 할 수 있도록 하는 수단이다.
@ 기능별 정리
- 기본 메타 문자
기호 | 설명 |
. | 모든 문자 일치 |
| | OR 왼쪽 문자(혹은 패턴) 혹은 오른쪽 문자(혹은 패턴)과 일치 |
[] | 문자 집합 구성원 중 하나와 일치 |
[^] | 문자 집합 구성원을 제외하고 일치 |
- | 범위 정의 ex) [A-Z] |
\ | 다음에 오는 문자를 이스케이프 |
- 수량자
기호 | 설명 |
* | 앞의 문자나 부분식이 0개 이상 탐욕적으로 찾기 |
*? | 탐욕적 수량자 *를 게으른 수량자로 바꿔 찾기 |
+ | 앞의 문자나 부분식을 하나 이상 탐욕적으로 찾기 |
+? | 탐욕적 수량자 +를 게으른 수량자로 바꿔 찾기 |
? | 앞의 문자나 부분식을 0개나 1개 찾기 |
{n} | 앞의 문자나 부분식이 정확히 n번 일치하는 경우 찾기 |
{m,n} | 앞의 문자나 부분식이 m번에서 n번 일치하는 경우 찾기 |
{n,} | 앞의 문자나 부분식이 n번 이상인 경우를 탐욕적으로 찾기 |
{n,}? | 탐욕적 수량자 {n,}를 게으른 수량자로 바꿔 찾기 |
==> 문자 하나가 아니라 조건에 해당하는 여러개의 문자를 찾기 위해 사용한다.
==> * : 없는 경우 포함 / + : 무조건 하나는 존재
==> 탐욕적 수량자: 조건에 맞지 않을 때까지 하나의 패턴으로 인식 / 게으른 수량자: 조건에 맞으면 종료
- 위치 지정
기호 | 설명 |
^ | 입력 문자열의 시작에서 그 다음 나오는 문자나 부분식과 일치하는지 검사 |
\A | 어떤 정규식에서는 ^의 역할 |
$ | 문자열의 끝과 일치 |
\Z | 어떤 정규식에서는 $의 역할 |
\b | 단언 경계(단어와 공백 사이의 위치)와 일 |
\B | \b와 반대(비단어 경계)로 일 |
==> 내부적인 의미를 찾는 논리적 수행만 한다. 위치 지정도 자체적만으로 의미가 없으며 앞뒤에 나오는 문자나 부분식과 함께 동작한다.
- 특수한 문자
기호 | 설명 |
[\b] | 역스페이스 |
\cx | x로 표시된 제어문자 찾기 |
\d | 모든 숫자와 일치. [0-9]와 동일 |
\D | \d와 반대. [^0-9]와 동일 |
\f | 용지 공급 문자 찾기. 페이지 넘기기(forfeed) |
\n | 줄 바꿈 문자 찾기. |
\r | 캐리지 리턴. |
\s | 공백, 택, 용지 공급 등과 같은 문자 찾기 |
\S | \s와 반대 |
\t | 탭 문자 찾기 |
\v | 세로 탭 문자 찾기 |
\w | 영숫자 문자나 밑줄과 일치 |
\W | \w와 반대 |
\xn | n으로 표시된 16진수 이스케이프 값과 일치 |
\0n | n으로 표시된 8진수 숫자와 일치 |
==> []안에 넣어주어야 하는 문자들을 가독성과 패턴 글자의 수를 줄이기 위해 사용한다.
- 역참조와 전후방탐색
기호 | 설명 |
(pattern) | 하위 표현식 정의. 패턴을 찾아 일치하는 항목을 캡처하는 부분식 |
\1 | 첫 번째 일치한 하위 표현식, 두번째 일치한 하위 표현식은 \2로 표기 |
(?=pattern) | 전방탐색 |
(?!pattern) | 부정형 전방탐색 |
?(BR)true | 조건 지정 |
?(BR)true|false | else 표현식 조건 지정 |
==> () 와 [ ]가 다르다는 것을 인지하고 사용해야 한다.
- 대소문자 변환
기호 | 설명 |
\E | \L 또는 \U 변환을 끝냄 |
\I | 다음에 오는 글자를 소문자로 변환 |
\L | \E를 만날 때까지 모든 문자를 소문자로 변환 |
\u | 다음에 오는 글자를 대문자로 변환 |
\U | \E를 만날 때까지 모든 문자를 대문자로 변환 |
==> 문자열을 찾고, 찾은 문자열을 바꾸는 용도로 사용한다.
- 옵션
기호 | 설명 |
i | ignore case, 대소문자를 무시하여 찾음 |
g | global, 찾는 패턴을 하나만 찾지 말고 계속 해서 찾음. 탐욕적 수량자처럼 일치하는 구간을 늘리는 것이 아니라 일치하는 패턴의 개수가 늘어남 |
m | multiline, 다중행 모드라고도 하며 라인 별로 처리하는 것이 아니라 입력 문자열에 줄바꿈이 있어도 이를 특수문자로 변환하여 하나로 본다. |
==> 여러 조건에 해당하는 단어, 여러 조건에 해당하는 단어를 다른 단어로 바꾸기, 복잡한 패턴 속에서 필요한 내용만 추출할 때 사용
- 우선 순위
기호 | 설명 |
\ | 이스케이프 |
(), (?:), (?=), [] | 괄호와 대괄호 |
*, +, ?, {n}, {n,}, {n,m} | 수량자 |
^, $, \anymetacharacter | 앵커와 시컨스 |
| | 교체 |
==> 정규식은 수식과 유사하게 왼쪽에서 오른쪽으로 계산되고 우선 순위를 따른다. 표는 우선 순위가 높은 것부터 순서대로 정리한 것이다.
'다양한 Dev. > 기본 정리' 카테고리의 다른 글
2023.05.15 GitHub - Fork (0) | 2023.05.15 |
---|---|
2023.05.11 - SQL vs noSQL (0) | 2023.05.11 |
2023.04.17 - Time Complexity(시간 복잡도) (0) | 2023.04.17 |
2023.04.13 - HTTP란? (0) | 2023.04.13 |
2023.03.28 - GitHub 사용 방법 (0) | 2023.04.01 |