> For the complete documentation index, see [llms.txt](https://heunnajo.gitbook.io/algorithms-problem-solving-skills/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://heunnajo.gitbook.io/algorithms-problem-solving-skills/undefined-4/untitled.md).

# 정규표현식 Meta 문자표

정규 표현식의 용어들

정규 표현식에서 사용되는 기호를 Meta 문자라고 표현한다. 표현식에서 내부적으로 특정 의미를 가지는 문자를 말하며 간단하게 정리하면 아래의 표와 같다.

| 표현식                | 의미                                                         |
| ------------------ | ---------------------------------------------------------- |
| **^**&#x78;        | 문자열의 시작을 표현하며 x문자로 시작됨                                     |
| &#x78;**$**        | 문자열의 종료를 표현하며 x문자로 종료됨                                     |
| **.**&#x78;        | 임의의 한 문자의 자리수를 표현하며 문자열이 x로 끝남                             |
| &#x78;**+**        | 반복을 표현하며 x문자가 한번 이상 반복됨                                    |
| &#x78;**?**        | 존재여부를 표현하며 x문자가 존재할 수도, 존재하지 않을 수도 있음                      |
| &#x78;**\***       | 반복여부를 표현하며 x문자가 0번 또는 그 이상 반복됨                             |
| &#x78;**\|**&#x79; | or를 표현하며 x 또는 y문자가 존재함                                     |
| **(**&#x78;**)**   | 그룹을 표현하며 x를 그룹으로 처리함                                       |
| (x)(y)             | 그룹들의 집합을 표현하며 앞에서 부터 순서대로 번호를 부여하여 관리하고 x,y는 각 그룹의 데이터로 관리 |
| (x)(**?:**&#x79;)  | 그룹들의 집합에 대한 예외를 표현하며 그룹 집합으로 관리되지 않음                       |
| x{n}               | 반복을 표현하며 x문자가 n번 반복됨                                       |
| x{n,}              | 반복을 표현하며 x문자가 **n번 이상** 반복됨                                |
| x{n,m}             | 반복을 표현하며 x문자가 최소 n번 이상 최대 m번 이하로 반복됨                       |

Meta 문자들 중에서 좀 더 특수하게 사용되는 문자들이 존재한다. '\[]' 는 내부에 지정된 문자열의 범위 중에서 한 문자만을 선택한다는 특수한 의미를 가진다. 그리고 내부에서 Meta 문자를 사용하면 다른 의미를 가지고 동작할 수 있으므로 잘 확인하고 사용해야 한다. 좀 더 특별한 용도로 사용되는 것들은 아래의 표와 같다.

| 표현식    | 의미                                           |
| ------ | -------------------------------------------- |
| \[xy]  | 문자 선택을 표현하며 x와 y 중에 하나를 의미                   |
| \[^xy] | not을 표현하며 x 및 y를 제외한 문자를 의미                  |
| \[x-z] | range를 표현하며 x \~ z 사이의 문자를 의미                |
| ₩^     | escape를 표현하며 ^를 문자로 사용함을 의미                  |
| ₩b     | word boundary를 표현하며 문자와 공백 사이의 문자를 의미        |
| ₩B     | non word boundary를 표현하며 문자와 공백 사이가 아닌 문자를 의미 |
| ₩d     | digit 를 표현하며 숫자를 의미                          |
| ₩D     | non digit를 표현하며 숫자가 아닌 것을 의미                 |
| ₩s     | space를 표현하며 공백 문자를 의미                        |
| ₩S     | non space를 표현하며 공백 문자가 아닌 것을 의미              |
| ₩t     | tab을 표현하며 탭 문자를 의미                           |
| ₩v     | vertical tab을 표현하며 수직 탭 문자를 의미               |
| ₩w     | word를 표현하며 알파벳 + 숫자 + \_ 중의 한 문자임을 의미        |
| ₩W     | non word를 표현하며 알파벳 + 숫자 + \_ 가 아닌 문자를 의미     |

정규표현식을 사용할 때는 Flag라는 것이 존재하는데 Flag를 사용하지 않으면 문자열에 대해서 검색을 한번만 처리하고 종료하게 된다. Flag는 다음과 같은 것들이 존재한다.

| Flag | 의미                                                   |
| ---- | ---------------------------------------------------- |
| g    | Global 을 표현하며 대상 문자열 내에 모든 패턴들을 검색하는 것을 의미           |
| i    | Ignore case 를 표현하며 대상 문자열에 대해서 대/소문자를 식별하지 않는 것을 의   |
| m    | Multi line을 표현하며 대상 문자열이 다중 라인의 문자열인 경우에도 검색하는 것을 의미 |

사용 예제

1. 개별 숫자 : /\[0-9/g\
   전체에서 0\~9 사이에 아무 숫자 '하나' 찾음
2. 개별 문자 : /\[to]/g\
   전체에서 t 혹은 o를 모두 찾음
3. 단어 : /filter/g\
   전체에서 f 따로 i 따로 찾는 게 아니라 'filter' 라는 단어에 매칭되는 것을 찾음
4. 단어 제외 : /₩b(?:(?!to)₩w)+₩b/g\
   전체에서 'to'라는 단어를 빼고 다른 단어 매칭 / 확인결과 "Tutorial" 도 제외됨
5. 단어 제외 : ₩b(?!₩bto₩b)₩w+₩b\
   전체에서 'to' 라는 단어를 빼고 다른 단어 매칭 / 확인결과 "Tutorial"는 제외 안됨. 이게 더 정확하다고 볼 수 있을 듯.
