POSIX ERE( Extended Regular Expression )

  1. +
  2. ?
  3. |




10. ? ( Question Mark )

구문 ( Syntax )

<question_mark> ::= ?
  • 사용 예
    <pattern_expr><question_mark>
    

설명 ( Description )

  • 0 or 1
  • 수량자(quantifier)로, <question_mark> 앞의 <pattern_expr>이 없거나 하나 있음을 의미한다.
    • ex) a? =>  , a
  • <question_mark>만 있는 경우
    • ex) ?
    • 결과
      • Oracle : zero-length match
      • PostgreSQL, MySQL, MariaDB : error 처리
  • zero-length match가 발생할 수 있다.


예제 ( Examples )

SQL> SELECT REGEXP_SUBSTR( 'god', 'goo?d' ) AS RESULT FROM DUAL;

RESULT
--------------------
god

SQL> SELECT REGEXP_SUBSTR( 'good', 'goo?d' ) AS RESULT FROM DUAL;

RESULT
--------------------
good

SQL> SELECT REGEXP_SUBSTR( 'goood', 'goo?d' ) AS RESULT FROM DUAL;

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

SQL> SELECT REGEXP_SUBSTR( 'ababc', '(ab)?' ) AS RESULT FROM DUAL;

RESULT
--------------------
ab

SQL> SELECT REGEXP_SUBSTR( 'knight', '.?night' ) AS RESULT FROM DUAL;

RESULT
--------------------
knight

SQL> SELECT REGEXP_SUBSTR( 'abc', 'z?' ) AS RESULT FROM DUAL;

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

SQL> SELECT REGEXP_COUNT( 'abc', 'z?' ) AS RESULT FROM DUAL;

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

  • <question_mark>만 있는 경우
    < Oracle >
    SQL> SELECT REGEXP_SUBSTR( 'ab', '?' ) AS RESULT FROM DUAL;
    
    RESULT
    ------------------------------
    NULL
    
    SQL> SELECT REGEXP_COUNT( 'ab', '?' ) AS RESULT FROM DUAL;
    
        RESULT
    ----------
             3
    
    
    < PostgreSQL >
    postgres=# SELECT REGEXP_MATCHES( 'ab', '?', 'g' ) AS RESULT;
    ERROR:  invalid regular expression: quantifier operand invalid
    
    
    < MySQL >
    mysql> SELECT REGEXP_SUBSTR( 'ab', '?' ) AS RESULT;
    ERROR 3688 (HY000): Syntax error in regular expression on line 1, character 1.
    
    
    < MariaDB >
    MariaDB [test]> SELECT REGEXP_SUBSTR( 'ab', '?' ) AS RESULT;
    ERROR 1139 (42000): Got error 'nothing to repeat at offset 0' from regexp
    
    


블로그 이미지

차트

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

,