오라클 정규식 설명 (Oracle Regular Expression Description)

오라클에서 정규식 또는 정규표현식의 패턴에 대해 이해해 보는 시간입니다. 오라클 다큐먼트를 직접 참고하고 싶으시면 "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] 표현식은 활용도가 높아서 사용하니까 알아두시면 좋아요.

댓글