오라클에서 정규식 또는 정규표현식의 패턴에 대해 이해해 보는 시간입니다. 오라클 다큐먼트를 직접 참고하고 싶으시면 "Regular Expression" 또는 "REGEXP"에 "Syntax", "Description" 등을 검색하여 더 상세한 내용을 확인할 수 있습니다.
Oracle Regular Expression Pattern
| 연산자 설명서 | |
| \ | 백슬래시는 문맥에 따라 용도가 나누어지는데, 보통 이스케이프 문자로 사용합니다. (escape character => 다음 문자가 특수문자임의 표시하는 문자) |
| * | 0개 이상 일치 ( >= 0 ) |
| + | 1개 이상 일치 ( >= 1 ) |
| ? | 0 또는 1개 일치 ( 0 or 1 ) |
| | | 대체 선택 연산자 ( or : alternation operator) |
| ^ | 표현식 시작(begin), <싱글라인모드 기준> |
| $ | 표현식 끝(end), <싱글라인모드 기준> |
| . | 어떠한 문자든 일치 여부 (NULL 제외) |
| [ ] | 표현식에 적중시키려는 문자 배열을 지정합니다. 대괄호 내부에서 ^ 로 시작하는 경우 [^], [ ] 표현과 반대로 제외시키려는 문자 배열을 지정합니다. |
| ( ) | 표현식을 하위표현식으로 그룹핑(grouping) 합니다. |
| {m} | 표현이 m번 적중 |
| {m,} | 표현이 적어도 m번 적중 |
| {m,n} | 표현이 적어도 m번을 적중하는데, 최대 n번까지 적중합니다. |
| \n | 역참조(backreference), n번 째(1~9) 선행 하위표현식(괄호로 grouping 된 표현식)과 일치 |
| [..] | 묶었을 때 한 글자가 되는 표현입니다. 예를 들면 Spanish 에서는 ch 가 한 글자라고 합니다. [.ch.]와 같이 사용하여 해당 글자를 캡처할 수 있는데, 실제로 쓰이는 건 거의 못 봤기에 이 정도가 있구나 하고 넘어가시면 됩니다. |
| [::] | 캐릭터 클래스를 표현합니다. 캐릭터 클래스의 몇 가지 예시는 하단에 있습니다. |
| [==] | 동치 클래스(equivalence class)에 속하는 표현입니다. [=a=] 와 같이 사용하면 a를 기반으로 하는 동치 표현을 적중합니다. |
Oracle Regular Expression Character Class Syntax
캐릭터 클래스를 사용하여 표현의 적중 여부를 확인하기도 합니다. 보통 영문, 숫자 일치 여부를 자주 사용하기에 alnum, alpha, digit, lower, upper, punct 정도는 알아두시면 좋습니다.
| 캐릭터 클래스 [::] | |
| [:alnum:] | 모든 영숫자 : All alphanumeric characters |
| [:alpha:] | 모든 알파벳 : All alphabetic characters |
| [:blank:] | 모든 공백 문자 : All blank space characters. |
| [:cntrl:] | 모든 제어 문자(비출력 문자) : All control characters (nonprinting) |
| [:digit:] | 모든 숫자 : All numeric digits |
| [:graph:] | All [:punct:], [:upper:], [:lower:], and [:digit:] characters. |
| [:lower:] | 모든 영어 소문자 : All lowercase alphabetic characters |
| [:print:] | 모든 출력 문자 : All printable characters |
| [:punct:] | 모든 문장 부호 : All punctuation characters |
| [:space:] | 모든 스페이스 캐릭터 : All space characters (nonprinting) |
| [:upper:] | 모든 영어 대문자 : All uppercase alphabetic characters |
| [:xdigit:] | 모든 유효 16진법 : All valid hexadecimal characters |
오라클 정규표현식에 대해 알려드리려고 합니다. 이번 주제의 핵심 중 하나는 POSIX, 그리고 나머지는 Class입니다. 두 가지를 큰 주제로 하여 세부적으로 살펴보도록 합시다.
- Oracle Regular Expression Description(POSIX)
- [[: Class :]]
오라클 정규표현식 POSIX
Metacharacter
오라클 정규표현식에서 사전에 정의한 약속 문자입니다.
Regular Expression Description
정규표현식 설명입니다.
| Metacharacter | Description |
| * | 0 이상 일치(zero or more) |
| ? | 일치하거나 일치하지 않거나 둘 중 하나(zero or one) |
| + | 1 이상 일치(one or more) |
| | | | 으로 구분된 표현 중 어느 것이든 일치하는 경우(or 연산과 비슷합니다) |
| . | 어떠한 표현이라도 일치하는 경우(데이터베이스 캐릭터 셋 기준이며 NULL, New Line Character는 제외합니다) |
| \ | 백슬래시 이후 메타캐릭터(*, ?, + 등등)를 문자 그대로 봅니다.(literal) |
| \n | n(정수)은 1부터 9까지며 n번 째 하위표현식 일치 여부입니다. |
| ^ | 표현식의 시작 |
| $ | 표현식의 끝 |
| (…) | 소괄호를 그룹 표현식으로 묶습니다. |
| […] | [ ] 목록에 나열된 어느 하나라도 표현과 일치 여부 |
| [^…] | [ ] 목록에 나열된 어느 하나라도 표현과 일치하지 않는지 여부 ([...]의 반대입니다) |
| [. Element .] | 여러 Element를 하나의 문자로 간주합니다. (예를 들면 ch 는 영문자로 보면 c, h 두 글자인데 스페인에서는 ch가 한 글자라고 하네요. 이와 같이 ch를 하나로 볼 때 사용할 수 있습니다) |
| [[: Class :]] | Class에 속하는 문자 표현식 어느 것이든 일치 여부 (아래에 Class 부연 설명 하겠습니다.) |
| [=Class=] | Class에 속하는 동치(동등:equivalence) 표현을 현재 로케일(locale)에서 찾습니다. 예를 들면, [=n=] 표현식은 n, N(대문자 동치), ñ(스페인 로케일)과 같습니다. |
| {m} | 정확히 m번 일치하는 표현 |
| {m,} | 적어도 m번은 일치하는 표현 |
| {m, n} | 적어도 m번은 일치하되, n번을 넘지 않는 표현 |
[[: Class :]]
[[: Class :]] 클래스 추가 안내입니다.
| Class | Description |
| [[:alnum:]] | 모든 영숫자(alphanumeric) |
| [[:alpha:]] | 모든 영문자(alphabetic) |
| [[:blank:]] | 모든 빈 공간 문자(blank space) |
| [[:cntrl:]] | 모든 제어 문자(non-printing control) (null, line feed, carriage return 같은 비인쇄 제어문) |
| [[:digit:]] | 모든 숫자(numeric digits) |
| [[:xdigit:]] | 모든 16진수(hexadecimal) |
| [[:punct:]] | 모든 구두문자(punctuation) |
| [[:upper:]] | 모든 영문 대문자(upper case alphabets) |
| [[:lower:]] | 모든 영문 소문자(lower case alphabets) |
| [[:graph:]] | 다음의 모든 클래스를 포함합니다. [[:punct:]], [[:upper:]], [[:lower:]], [[:digit:]] |
| [[:print:]] | 모든 출력 문자(printable) |
| [[:space:]] | 모든 공백 문자(carriage return, newline, form feed, vertical tab 등) |
| [a-z] | [[:lower:]]과 비슷합니다. a부터 z까지 일치 여부를 확인합니다. a부터 m까지 하려면 [a-m] |
| [A-Z] | [[:upper:]]와 비슷합니다. A부터 Z까지 일치 여부를 확인합니다. A부터 M까지 하려면 [A-M] |
| [0-9] | [[:digits:]]와 비슷합니다. 0부터 9까지 숫자 일치 여부를 확인합니다. 0부터 5까지 하려면 [0-5] |
| [A-Za-z0-9] | [[:alnum:]]과 비슷합니다. A부터 Z까지, a부터 z까지, 0부터 9까지 일치 여부를 확인합니다. [A-Z0-9]와 같이 조합할 수 있습니다. [a-zA-Z], [0-5a-dA-E] 등 원하시는 조합을 택하시면 됩니다. |
[a-z], [A-Z], [0-9], [A-Za-z0-9] 표현식은 활용도가 높아서 사용하니까 알아두시면 좋아요.
