POSIX BRE( Basic Regular Expression )

  1. ^
  2. $
  3. .
  4. *
  5. \
  6. (
  7. {
  8. [



2. $ ( Dollar )

구문 ( Syntax )

<dollar> ::= $
  • 사용 예
    <dollar>
    
    <pattern_expr><dollar>
    
    <dollar><pattern_expr>
    
    <pattern_expr><dollar><pattern_expr>
    

설명 ( Description )

  • source string의 끝을 의미한다.
  • 일반적으로 <dollar> 앞에 <pattern_expr>을 입력하여 사용한다.
    • ex) abc$
  • <dollar> 만 있는 경우, source string의 맨 뒤를 매칭한다. ( zero-length match )
    • ex) $
  • <dollar> 뒤에 <pattern_expr>이 있는 경우, 어떤 source string과도 매칭하지 않는다.
    • ex) $a
    • 예외
      • ex) ab$c* <=> ab$
      • ex) $c* <=> $


별다른 옵션이 없다면 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', '$c' ) AS RESULT FROM DUAL;

RESULT
--------------------
NULL

SQL> SELECT REGEXP_COUNT( 'abc', '$c' ) AS RESULT FROM DUAL;

    RESULT
----------
         0

SQL> SELECT REGEXP_SUBSTR( 'abc', '.$c*' ) AS RESULT FROM DUAL;

RESULT
--------------------
c

SQL> SELECT REGEXP_SUBSTR( 'abc', 'c$' ) AS RESULT FROM DUAL;

RESULT
--------------------
c

SQL> SELECT REGEXP_SUBSTR( 'abc', '(.*)$' ) AS RESULT FROM DUAL;

RESULT
--------------------
abc

SQL> SELECT REGEXP_SUBSTR( 'abc'||CHR(10)||'def', '.$' ) AS RESULT FROM DUAL;

RESULT
--------------------
f

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
--------------------
c

SQL> SELECT REGEXP_SUBSTR( 'abc'||CHR(10)||'def', '.$', 1, 2, 'm' ) AS RESULT FROM DUAL;

RESULT
--------------------
f

SQL> SELECT REGEXP_COUNT( 'abc'||CHR(10)||'def', '$', 1, 'm' ) AS RESULT FROM DUAL;

    RESULT
----------
         2

SQL> SELECT REGEXP_SUBSTR( 'a', '.$' ) AS RESULT FROM DUAL;

RESULT
--------------------
a

SQL> SELECT REGEXP_COUNT( 'a', '.$' ) AS RESULT FROM DUAL;

    RESULT
----------
         1

SQL> SELECT REGEXP_SUBSTR( 'a'||CHR(10), '.$' ) AS RESULT FROM DUAL;

RESULT
--------------------
a

SQL> SELECT REGEXP_COUNT( 'a'||CHR(10), '.$' ) AS RESULT FROM DUAL;

    RESULT
----------
         1

SQL> SELECT REGEXP_SUBSTR( 'a'||CHR(10)||CHR(10), '.$' ) AS RESULT FROM DUAL;

RESULT
--------------------
NULL

SQL> SELECT REGEXP_COUNT( 'a'||CHR(10)||CHR(10), '.$' ) AS RESULT FROM DUAL;

    RESULT
----------
         0

SQL> SELECT REGEXP_SUBSTR( 'a'||CHR(10)||CHR(10), '.$', 1, 1, 'm' ) AS RESULT FROM DUAL;

RESULT
--------------------
a

SQL> SELECT REGEXP_SUBSTR( 'a'||CHR(10)||CHR(10), '.$', 1, 2, 'm' ) AS RESULT FROM DUAL;

RESULT
--------------------
NULL

SQL> SELECT REGEXP_COUNT( 'a'||CHR(10)||CHR(10), '.$', 1, 'm' ) AS RESULT FROM DUAL;

    RESULT
----------
         1

SQL> SELECT REGEXP_COUNT( 'a', '.$', 1, 'm' ) AS RESULT FROM DUAL;

    RESULT
----------
         1

SQL> SELECT REGEXP_COUNT( 'a'||CHR(10), '.$', 1, 'm' ) AS RESULT FROM DUAL;

    RESULT
----------
         1

SQL> SELECT REGEXP_COUNT( 'a'||CHR(10)||CHR(10), '.$', 1, 'm' ) AS RESULT FROM DUAL;

    RESULT
----------
         1

SQL> SELECT REGEXP_COUNT( 'a', '$' ) AS RESULT FROM DUAL;

    RESULT
----------
         1

SQL> SELECT REGEXP_COUNT( 'a'||CHR(10), '$' ) AS RESULT FROM DUAL;

    RESULT
----------
         1

SQL> SELECT REGEXP_COUNT( 'a'||CHR(10)||CHR(10), '$' ) AS RESULT FROM DUAL;

    RESULT
----------
         1

SQL> SELECT REGEXP_COUNT( 'a'||CHR(10)||CHR(10)||CHR(10), '$' ) AS RESULT FROM DUAL;

    RESULT
----------
         1

SQL> SELECT REGEXP_COUNT( 'a', '$', 1, 'm' ) AS RESULT FROM DUAL;

    RESULT
----------
         1

SQL> SELECT REGEXP_COUNT( 'a'||CHR(10), '$', 1, 'm' ) AS RESULT FROM DUAL;

    RESULT
----------
         1

SQL> SELECT REGEXP_COUNT( 'a'||CHR(10)||CHR(10), '$', 1, 'm' ) AS RESULT FROM DUAL;

    RESULT
----------
         2

SQL> SELECT REGEXP_COUNT( 'a'||CHR(10)||CHR(10)||CHR(10), '$', 1, 'm' ) AS RESULT FROM DUAL;

    RESULT
----------
         3

SQL> SELECT REGEXP_COUNT( 'a'||CHR(10)||CHR(10)||CHR(10)||CHR(10), '$', 1, 'm' ) AS RESULT FROM DUAL;

    RESULT
----------
         4


블로그 이미지

차트

소소한 일상 C코드 DB 항상 행복하게^-^★

,

Meta Characters

  • 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. ^
  2. $
  3. .
  4. *
  5. \
  6. (
  7. {
  8. [



1. ^ ( Caret )

구문 ( Syntax )

<caret> ::= ^
  • 사용 예
    <caret>
    
    <caret><pattern_expr>
    
    <pattern_expr><caret>
    
    <pattern_expr><caret><pattern_expr>
    

설명 ( Description )

  • source string의 시작을 의미한다.
  • 일반적으로 <caret> 뒤에 <pattern_expr>을 입력하여 사용한다.
    • ex) ^abc
  • <caret> 만 있는 경우, source string의 맨 앞을 매칭한다. ( zero-length match )
    • ex) ^
  • <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


블로그 이미지

차트

소소한 일상 C코드 DB 항상 행복하게^-^★

,