> For the complete documentation index, see [llms.txt](https://docs.sysout.co.kr/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.sysout.co.kr/base-language/regular-expression.md).

# Regular Expression

## 정규표현식

정규표현식(Regular Expression)은 문자열에 나타나는 특정 패턴을 검사하기 위한 식이다. 식을 정확하게 작성하면 간단한 프로그래밍 코드만으로 복잡한 패턴의 문자열을 검사할 수 있다.

주로 검사하는 항목들은 다음과 같다.

* 아이디
* 비밀번호
* 이메일
* 전화번호
* 주소
* 우편번호
* 카드번호
* IP주소
* 홈페이지 주소

이밖에도 원하는 항목들을 식을 만들어 검사할 수 있으며, 홈페이지에서는 대부분의 입력창 검사를 정규표현식으로 하므로 **언어 종류와 상관없이 공용으로 사용할 수 있는 정규표현식**을 배우는 것이 좋다.

### 참고 사이트

정규표현식을 배울 때 유용한 사이트들은 다음과 같다.

* 시각화 사이트 : <https://regexper.com/>
* 패턴 탐색 사이트 : <https://regexr.com/>

### 주요 정규표현식 기호

정규표현식에 사용되는 기호들은 다음과 같다.

#### 시작과 종료

| 기호 | 설명        |
| -- | --------- |
| ^  | 검사식의 시작지점 |
| $  | 검사식의 종료지점 |

#### 글자 표시

| 기호       | 설명                              |
| -------- | ------------------------------- |
| abc      | `abc`라는 문자열이 등장한다               |
| \[abc]   | `a`, `b`, `c` 중 하나의 글자가 등장한다    |
| \[a-c]   | a부터 `c` 사이의 글자가 하나 등장한다         |
| \[^abc]  | `a`, `b`, `c`를 제외한 하나의 글자가 등장한다 |
| (ab\|bc) | `ab` 또는 `bc` 중 하나의 글자가 등장한다(OR) |

#### 횟수 표시

| 기호             | 설명                                    |
| -------------- | ------------------------------------- |
| a{5}           | `a`가 `5번` 나온다                         |
| a{5,}          | `a`가 `5번` 이상 나온다                      |
| a{5,7}         | `a`가 `5번` 이상 `7번` 이하 나온다              |
| (hello){5}     | `hello`가 `5번` 나온다(괄호로 묶어야 한다)         |
| (hello\|hi){5} | `hello` 또는 `hi`가 `5번` 나온다             |
| \[a-z]+        | `a`부터 `z`사이 중 하나의 글자가 `1번 이상` 나온다     |
| \[a-z]{1,}     | `a`부터 `z`사이 중 하나의 글자가 `1번 이상` 나온다     |
| \[a-z]\*       | `a`부터 `z`사이 중 하나의 글자가 `0번 이상`나온다      |
| \[a-z]?        | `a`부터 `z`사이 중 하나의 글자가 `0번` 또는 `1번`나온다 |

#### 특수표시

| 기호 | 설명                              |
| -- | ------------------------------- |
| \d | digit. \[0-9]와 같다               |
| \w | word. \[A-Za-z0-9-\_]와 같다.      |
| \s | whitespace. 공백을 의미한다.           |
| .  | any character. 아무 글자나 1개를 의미한다. |

### 정규표현식 예시

#### 휴대 전화번호 - 1

```
^01[06789]-[0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789][0123456789][0123456789]$
```

![](https://4208234536-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M_TNZwLuHV9ipYLbvRq%2F-MiyjECWBt-2HHhUSGeW%2F-MiyjfOmbfBGsW39WRWS%2Fimage.png?alt=media\&token=34eb7883-9e8a-46e2-9cfa-52add3d74e17)

#### 휴대전화번호 - 2

```
^01[016-9]-[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]$
```

![](https://4208234536-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M_TNZwLuHV9ipYLbvRq%2F-MiyjECWBt-2HHhUSGeW%2F-MiylCoBfzEy50ZgIem6%2Fimage.png?alt=media\&token=e1aa52bf-fc1a-4f7b-b3e3-983abc0e7ba0)

#### 휴대전화번호 - 3

```
^01[016-9]-[0-9]{4}-[0-9]{4}$
```

![](https://4208234536-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M_TNZwLuHV9ipYLbvRq%2F-MiyjECWBt-2HHhUSGeW%2F-Miym1wrp5eFVujo4dVl%2Fimage.png?alt=media\&token=0d5ce4f1-0853-433e-b935-bd5ec1bf79b0)

#### 휴대전화번호 - 4

```
^01[016-9](-[0-9]{4}){2}$
```

()를 이용하여 복잡한 식을 하나의 그룹으로 표현한 뒤 반복하였다.

![](https://4208234536-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M_TNZwLuHV9ipYLbvRq%2F-MiyjECWBt-2HHhUSGeW%2F-MiymracsvlVJdYBaL0A%2Fimage.png?alt=media\&token=c0498573-e706-4558-8b37-da4f8036b1b1)
