POSIX ERE( Extended Regular Expression )

  1. +
  2. ?
  3. |




11. | ( Vertical Bar )

구문 ( Syntax )

<vertical_bar> ::= |
  • 사용 예
    <vertical_bar>
    
    <pattern_expr><vertical_bar>
    
    <vertical_bar><pattern_expr>
    
    <pattern_expr><vertical_bar><pattern_expr>
    

설명 ( Description )

  • '또는', 'or'를 의미한다.
  • 일반적으로, 좌측 <pattern_expr>부터 검사한 뒤, 매칭이 없으면 우측 <pattern_expr>을 검사한다.
    • ex) REGEXP_SUBSTR( 'take', '(m|t)ake' ) => take
    • ex) REGEXP_SUBSTR( 'aaa', 'aa|aaa' ) => aa
    • 예외) PostgreSQL : 예제 확인
  • <patten_expr> 중 하나가 empty string일 경우, 제쳐두고 나머지 <pattern_expr>을 우선적으로 매칭한다.
    • ex) REGEXP_SUBSTR( 'gdb', '|g' ) => 'g'
      • 이 때 그 나머지 <pattern_expr>의 매칭이 없을 경우 zero-length match가 발생한다.
      • ex) REGEXP_SUBSTR( 'abc', '|g' ) => zero-length match
  • 두 <pattern_expr> 모두 empty string일 경우 zero-length match가 발생한다.
    • ex) |
  • <pattern_expr>이 string일 경우, 그 string을 다룬다.
    • ex) trick|treat => trick or treat ( but not trickreat or trictreat )


예제 ( Examples )

SQL> SELECT REGEXP_SUBSTR( 'abc', 'a|b' ) AS RESULT FROM DUAL;

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

SQL> SELECT REGEXP_SUBSTR( 'abc', 'b|a' ) AS RESULT FROM DUAL;

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

SQL> SELECT REGEXP_SUBSTR( 'bbb', 'bb|bbb' ) AS RESULT FROM DUAL;

RESULT
--------------------
bb

SQL> SELECT REGEXP_SUBSTR( 'bbb', 'bbb|bb' ) AS RESULT FROM DUAL;

RESULT
--------------------
bbb

SQL> SELECT REGEXP_SUBSTR( 'ababcdcdcd', '(ab){2}|(cd)+' ) AS RESULT FROM DUAL;

RESULT
------------------------------
abab

SQL> SELECT REGEXP_SUBSTR( 'ababcdcdcd', '(ab){2}|(cd)+', 1, 2 ) AS RESULT FROM DUAL;

RESULT
------------------------------
cdcdcd

SQL> SELECT I1, REGEXP_SUBSTR( I1, '(1[0-2]|0?[1-9])/(3[01]|[12][0-9]|0?[1-9])(st|nd|rd|th)?' ) AS RESULT FROM T1;

I1                             RESULT
------------------------------ ------------------------------
12/25                          12/25
02/14                          02/14
11/26th                        11/26th
4/3rd                          4/3rd
10/01st                        10/01st

SQL> SELECT REGEXP_SUBSTR( 'mississippi', 'mi(s|ss)i(s|ss)i(p|pp)i' ) AS RESULT FROM DUAL;

RESULT
--------------------
mississippi

SQL> SELECT REGEXP_SUBSTR( '801010-1234567',
 '[6-9][0-9]([0][1-9]|[1][0-9])([0][1-9]|[1-2][0-9]|[3][0-1])-[1-4][0-9]{6}' ) AS RESULT FROM DUAL;

RESULT
--------------------
801010-1234567

SQL> SELECT REGEXP_SUBSTR( '800010-1234567',
 '[6-9][0-9]([0][1-9]|[1][0-9])([0][1-9]|[1-2][0-9]|[3][0-1])-[1-4][0-9]{6}' ) AS RESULT FROM DUAL;

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

SQL> SELECT REGEXP_SUBSTR( '801010-2234567',
 '[6-9][0-9]([0][1-9]|[1][0-9])([0][1-9]|[1-2][0-9]|[3][0-1])-[1-4][0-9]{6}' ) AS RESULT FROM DUAL;

RESULT
--------------------
801010-2234567

SQL> SELECT REGEXP_SUBSTR( '801010-5234567',
 '[6-9][0-9]([0][1-9]|[1][0-9])([0][1-9]|[1-2][0-9]|[3][0-1])-[1-4][0-9]{6}' ) AS RESULT FROM DUAL;

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

  • zero-length match : PostgreSQL로 테스트
    postgres=# SELECT REGEXP_MATCHES( 'abc', 'a|', 'g' ) AS RESULT;
     result 
    --------
     {a}
     {""}
     {""}
     {""}
    (4 )
    
    postgres=# SELECT REGEXP_MATCHES( 'abc', '|a', 'g' ) AS RESULT;
     result 
    --------
     {a}
     {""}
     {""}
     {""}
    (4 )
    
    postgres=# SELECT REGEXP_MATCHES( 'abc', 'z|', 'g' ) AS RESULT;
     result 
    --------
     {""}
     {""}
     {""}
     {""}
    (4 )
    
    postgres=# SELECT REGEXP_MATCHES( 'abc', '|z', 'g' ) AS RESULT;
     result 
    --------
     {""}
     {""}
     {""}
     {""}
    (4 )
    
    postgres=# SELECT REGEXP_MATCHES( 'abc', '|', 'g' ) AS RESULT;
     result 
    --------
     {""}
     {""}
     {""}
     {""}
    (4 )
    
    


블로그 이미지

차트

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

,