[REGEX] :: POSIX ERE Meta Character '' 11. | ( vertical bar ) ''
IT/Regular Expression 2019. 10. 17. 16:34POSIX ERE( Extended Regular Expression )
- +
- ?
- |
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
- ex) REGEXP_SUBSTR( 'gdb', '|g' ) => 'g'
- 두 <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개 행)
'IT > Regular Expression' 카테고리의 다른 글
[REGEX] :: POSIX ERE Meta Character '' 10. ? ( question mark ) '' (0) | 2019.10.17 |
---|---|
[REGEX] :: POSIX ERE Meta Character '' 9. + ( plus ) '' (0) | 2019.10.17 |
[REGEX] :: POSIX BRE Meta Character '' 8. [ ] ( bracket ) '' (0) | 2019.08.28 |
[REGEX] :: POSIX BRE Meta Character '' 7. { } ( brace ) '' (0) | 2019.08.28 |
[REGEX] :: POSIX BRE Meta Character '' 6. ( ) ( parenthesis ) '' (0) | 2019.07.16 |