POSIX ERE( Extended Regular Expression )
- +
- ?
- |
10. ? ( Question Mark )
구문 ( Syntax )
<question_mark> ::= ?
설명 ( Description )
- 0 or 1
- 수량자(quantifier)로, <question_mark> 앞의 <pattern_expr>이 없거나 하나 있음을 의미한다.
- <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