# 갯수 반복 패턴

## 0. 요약

| 기호        | 의미                     |
| --------- | ---------------------- |
| ?         | 없거나 or 최대 한개만          |
| \*        | 없거나 or 있거나(여러개)        |
| +         | 최소 한개 or 여러개           |
| {n}       | n개                     |
| {Min,}    | 최소 Min개 이상             |
| {Min,Max} | 최소 Min개 이상, 최대 Max개 이하 |

***

## 1. ? 패턴

`?` 패턴은 물음표 앞의 패턴이 있든 없든 상관없이 찾는다. 단, 있을 때는 1개 있는 경우만 찾는다.

### 1-1. ? 패턴 사용예시

정규 표현식은 `/l?o/g`이다. 해당 정규 표현식을 해석하자면 `l` 문자는 없어도 되지만 있을 경우 1개만 매칭된다. `o` 문자는 `l` 문자 이후에 오게 될 문자이다. 또한 `g` 플러그를 사용했기 때문에 정규 표현식에 해당하는 모든 문자가 매칭된다.

즉 `/l?o/g`을 통해 매칭되는 문자는 `o` 또는 `lo` 뿐이다.

![? 패턴 사용예시](https://3395804243-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtlrW8c4MEVWoel5YVxSk%2Fuploads%2Fgit-blob-642c5c4c0d23ff044f202a586bd1fa1bcbb831fd%2FregExpPattern25.png?alt=media)

***

## 2. \* 패턴

`*` 패턴은 별표 앞의 패턴이 있든 없든 상관없이 찾는다. `?` 패턴과는 다르게 있는 경우에 1개 이상있는 경우를 찾는다.

### 2-1. \* 패턴 사용예시

정규 표현식은 `/l*o/g`이다. 해당 정규 표현식을 해석하자면 `l` 문자는 없어도 되지만 있을 경우 1개 이상이 매칭된다. `o` 문자는 `l` 문자 이후에 오게 될 문자이다. 또한 `g` 플러그를 사용했기 때문에 정규 표현식에 해당하는 모든 문자가 매칭된다.

즉 `/l*o/g`을 통해 매칭되는 문자는 `o` 또는 `l(1개 이상)o`이다.

![\* 패턴 사용예시](https://3395804243-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtlrW8c4MEVWoel5YVxSk%2Fuploads%2Fgit-blob-81868de1b758c669708245fddf0236b4f1630152%2FregExpPattern26.png?alt=media)

***

## 3. + 패턴

`+` 패턴은 플러스 앞의 패턴이 무조건 있는 경우를 찾고 1개 이상 있는 경우를 모두 찾는다.

`?`, `*` 패턴은 기호 앞의 패턴이 없는 경우도 찾지만 `+` 패턴은 기호 앞의 패턴이 없는 경우엔 찾지 않는다.

### 3-1. + 패턴 사용예시

정규 표현식은 `/l+o/g`이다. 해당 정규 표현식을 해석하자면 `l` 문자는 반드시 있어야 하며 없는 경우 매칭이 되지 않는다. 또한 있을 경우 1개 이상이 매칭된다. 또한 `g` 플러그를 사용했기 때문에 정규 표현식에 해당하는 모든 문자가 매칭된다.

즉 `/l+o/g`을 통해 매칭되는 문자는 `l(1개 이상)o`이다.

![+ 패턴 사용예시](https://3395804243-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtlrW8c4MEVWoel5YVxSk%2Fuploads%2Fgit-blob-b72ca3ef72924bb8cd014a507cfc8ee00cf8f061%2FregExpPattern27.png?alt=media)

***

## 4. {n} 패턴

`{n}` 패턴은 앞의 패턴이 정확히 `n`개 있는 경우를 찾는다.

### 4-1. {n} 패턴 사용예시

정규 표현식은 `/l{3}o/g`이다. 해당 정규식을 해석하자면 `l` 문자가 정확히 3개 있어야 하고 이후에 `o` 문자가 와야한다. 즉 `lllo` 문자만 매칭된다. 또한 `g` 플러그를 사용했기 때문에 정규 표현식에 해당하는 모든 문자가 매칭된다.

![{n} 패턴 사용예시](https://3395804243-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtlrW8c4MEVWoel5YVxSk%2Fuploads%2Fgit-blob-935ea36c2c313917ddcaea2c8994d1af7ca3af55%2FregExpPattern28.png?alt=media)

***

## 5. {Min,} 패턴

`{Min,}` 패턴은 앞의 패턴이 최소 `Min`개 있는 경우를 찾는다.

### 5-1. {Min,} 패턴 사용예시

정규 표현식은 `/l{3,}o/g`이다. 해당 정규식을 해석하자면 `l` 문자가 3개 이상이 있고 이후에 `o` 문자가 와야한다. 또한 `g` 플러그를 사용했기 때문에 정규 표현식에 해당하는 모든 문자가 매칭된다.

![{Min,} 패턴 사용예시](https://3395804243-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtlrW8c4MEVWoel5YVxSk%2Fuploads%2Fgit-blob-2bb5fd93f422d0865a70cd7d4b7d8cedadebd262%2FregExpPattern29.png?alt=media)

***

## 6. {Min,Max} 패턴

`{Min,Max}` 패턴은 앞의 패턴이 최소 `Min`개 있고 최대 `Max`개인 경우를 찾는다.

### 6-1. {Min,Max} 패턴 사용예시

정규 표현식은 `/l{2,4}o/g`이다. 해당 정규식을 해석하자면 `l` 문자가 최소 2개 이상 최대 4개 이하가 있고 이후에 `o` 문자가 와야한다. 또한 `g` 플러그를 사용했기 때문에 정규 표현식에 해당하는 모든 문자가 매칭된다.

![{Min,Max} 패턴 사용예시](https://3395804243-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtlrW8c4MEVWoel5YVxSk%2Fuploads%2Fgit-blob-6a5ccf2b253584f2e7e7bde08cc9d2a3e66c1cae%2FregExpPattern30.png?alt=media)

***

## 7. Conclusion

> 갯수 반복 패턴에 대해서 정리를 하였다. 이전에 정리한 숫자 문자 매칭 패턴과 함께 쓰여 더욱 다양한 패턴을 만들 수 있는 것이 놀라웠고 이러한 것들을 어떻게 실제 코드에 적용할 수 있을까 하는 기대감이 생기고 있다. 코딩 테스트 문제에 정규식을 이용한 풀이가 안나올려나..?

***

## 참고

[\[JS\] 📚 정규표현식(RegExp) - 이해하기 쉽게 정리 + 응용 예제](https://inpa.tistory.com/entry/JS-%F0%9F%93%9A-%EC%A0%95%EA%B7%9C%EC%8B%9D-RegExp-%EB%88%84%EA%B5%AC%EB%82%98-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-%EC%89%BD%EA%B2%8C-%EC%A0%95%EB%A6%AC)\
[정규표현식(Regular Expression, regex)](https://blog.walkinpcm.com/15)

***

📅 2023-01-25
