by 하나가라 정규표현식 REGEXP_SUBSTR Regular Expression [2012.05.10 19:29:55]
.(마침표) ==>> 정규식 표현에 존재하는 모든 문자와 매칭(newline은 제외)
예) a.b (acb, axb 등)
_(밑줄기호) ==>> 단문자 와일드카드를 의미(where 절의 like사용시)
예) a_b
# 앵커(anchor) 연산자
^(캐럿) ==>> 라인이 시작
$(달러) ==>> 라인의 끝
예) ^a.b$ 는 acb, azb, aab, abb와 매칭된다.
# 반복연산자(Repetition Operator, Quantifier)
^a.*e$ ==>> a로 시작해서 e로 끝나는 문자열 매칭
* ==>> 이 메타문자는 임의의 메타문자(.)가 0번, 한번 또는 여러번 반복되는 조건에 매칭된다.
예) select regexp_instr('app_store', '^a.*e$') from dual
LIKE 연산자에서는 이와 동일한 연산자로 a%b를 지원한다.
여기에서 %는 임의 문자가 0번, 한번 또는 여러번 반복되는 조건에 매칭된다.
() ==>> 서브표현식 즉, 그룹으로 나타냄
예) b(an)*a 는 ba, bana, banana, yourbananasplit 과 매칭
select regexp_substr('ba', 'b(an)*a') a1
, regexp_substr('banda', 'b(an)*a') a2
, regexp_substr('yourbananasplit ', 'b(an)*a') a3
from dual;
ba ba banana
즉, (an)* 의 표현은 an을 그룹으로 묶고 0회, 1회, 여러번 반복되는 조건에 매칭된다.
? ==>> 0회 또는 1회 매치
+ ==>> 1회 또는 그 이상 횟수로 매치
{m} ==>> 정확히 m회 매치
{m,} ==>> 최소한 m회 매치
# 사전정의된 POSIX 문자 클래스
[:alpha:] ==>> 알파벳 문자
[:lower:] ==>> 소문자 알파벳 문자
[:upper:] ==>> 대문자 알파벳 문자
[:digit:] ==>> 숫자
[:alnum:] ==>> 알파벳/숫자
[:space:] ==>> 출력되지 않는 공백문자(예: carriage return, newline, vertical tab, form feed등)
[:punct:] ==>> 구두점 기호
[:cntrl:] ==>> (출력되지 않는) 컨트롤 문자
[:print:] ==>> 출력 가능한 문자
- POSIX 문자 클래스는 반드시 대괄호[]로 묶여져야 한다. 예를 들어 [[:lower:]] 는 소문자와 매치가 되며
[[:lower:]]{5} 는 연속적으로 5회 소문자와 매치되어야 한다.
- ^ab[cd]ef$ 는 문자열 abcef, abdef 와 매치된다. 여기에서 c또는 d 두개의 문자중 하나가 사용되어 있어야 한다.
select regexp_substr('abcef', '^ab[cd]ef$') a1
, regexp_substr('abdef', '^ab[cd]ef$') a2
from dual;
# 대체 매칭 및 표현식의 그룹화
| ==>> 대체 문자를 구분(그룹핑 연산자 ()와 함께 사용하기도 함)
() ==>> 반복연산자 또는 백레퍼런스를 위해 대체 유닛을 서브표현식으로 그룹화
[char] ==>> |문자 리스트. 문자 리스트 내부에 위치하는 대부분의 메타문자는 일반 문자로 인식됨
그 예외가 캐럿(^) 기호와 하이픈(-) 기호
- [^[:digit:]] 의 경우 ^는 반대 조건을 의미함 즉, 숫자가 아닌 문자로 구성된 패턴과 매칭.
- ^[[:digit:]] 의 경우 ^는 맨 앞을 의미함. 즉, 숫자로 시작하는 패턴과 매칭.
- 하이픈(-)은 영역(range)를 의미함. 즉, [a-m]은 a와 m사이의 임의의 문자와 매칭
- [-afg]의 경우처럼 하이픈이 문자리스트의 첫번째 문자로 사용된 경우에는 실제 하이픈을 의미함.
- t(a|e|i)n 은 문자 t와 n사이에 오는 3개의 대체문자을 지정하고 있다.
즉, tan, ten, tin 등의 문자열로 매치된다. 같은 표현식으로 t[aei]n으로 표현 가능하다.
댓글 달아주신분들 정말 감사합니다.ㅠㅠ