- 12가지 메타 문자들의 정의 및 스펙을 기술 ( 소괄호 닫기는 소괄호와 같이 묶었기 때문에 항목은 11개 )
- BRE의 메타문자, ERE에서 추가된 메타문자 순서로 작성
- 항목별로 구문( Syntax ), 설명( Description ), 예제( Examples )
- 예제는 Oracle DBMS 18c 버전 기준 REGEXP_SUBSTR() 함수를 사용,
PostgreSQL, MariaDB, MySQL 에서의 Test와 결과가 다른 것은 명시하였음
'매칭한다 ( Matching )'
str을 매칭한다고 함은, 일치한다가 아니라 source string '안'에 해당 패턴이 '포함'됨을 의미한다.
( When I say a regex "matches" a string, I really mean that it matches in a string. )
즉,
'a' match 'cat' X
'a' match in 'cat' O
( Technically, the regex 'a' doesn't match cat, but matches the 'a' in cat. )
혼동에 주의하자!
POSIX BRE( Basic Regular Expression )
- ^
- $
- .
- *
- \
- (
- {
- [
1. ^ ( Caret )
구문 ( Syntax )
<caret> ::= ^
설명 ( Description )
- source string의 시작을 의미한다.
- 일반적으로 <caret> 뒤에 <pattern_expr>을 입력하여 사용한다.
- <caret> 만 있는 경우, source string의 맨 앞을 매칭한다. ( zero-length match )
- <caret> 앞에 <pattern_expr>이 있는 경우, 어떤 source string과도 매칭하지 않는다.
- ex) a^
- 예외
- ex) a*^bc <=> ^bc
- ex) a*^ <=> ^
별다른 옵션이 없다면 source string의 시작지점을 매칭하지만,
multiline mode 옵션이 주어지면 source string의 각 라인 시작지점들을 매칭한다. ( 이 경우, 라인의 기준은 ASCII(10)인 Line Feed(\n)이다. )
예제 ( Examples )
SQL> SELECT REGEXP_SUBSTR( 'abc', '^' ) AS RESULT FROM DUAL;
RESULT
--------------------
NULL
SQL> SELECT REGEXP_COUNT( 'abc', '^' ) AS RESULT FROM DUAL;
RESULT
----------
1
SQL> SELECT REGEXP_SUBSTR( 'abc', 'a^' ) AS RESULT FROM DUAL;
RESULT
--------------------
NULL
SQL> SELECT REGEXP_COUNT( 'abc', 'a^' ) AS RESULT FROM DUAL;
RESULT
----------
0
SQL> SELECT REGEXP_SUBSTR( 'abc', 'a*^.' ) AS RESULT FROM DUAL;
RESULT
--------------------
a
SQL> SELECT REGEXP_SUBSTR( 'abc', '^a' ) AS RESULT FROM DUAL;
RESULT
--------------------
a
SQL> SELECT REGEXP_SUBSTR( 'abc', '^(.*)' ) AS RESULT FROM DUAL;
RESULT
--------------------
abc
SQL> SELECT REGEXP_SUBSTR( 'abc'||CHR(10)||'def', '^.' ) AS RESULT FROM DUAL;
RESULT
--------------------
a
SQL> SELECT REGEXP_COUNT( 'abc'||CHR(10)||'def', '^.' ) AS RESULT FROM DUAL;
RESULT
----------
1
SQL> SELECT REGEXP_SUBSTR( 'abc'||CHR(10)||'def', '^.', 1, 1, 'm' ) AS RESULT FROM DUAL;
RESULT
--------------------
a
SQL> SELECT REGEXP_SUBSTR( 'abc'||CHR(10)||'def', '^.', 1, 2, 'm' ) AS RESULT FROM DUAL;
RESULT
--------------------
d
SQL> SELECT REGEXP_COUNT( 'abc'||CHR(10)||'def', '^', 1, 'm' ) AS RESULT FROM DUAL;
RESULT
----------
2