SingleStoreDB 정규표현식(Regular Expression) 사용 사례

Jongsoo Noh·2023년 1월 23일
0
post-thumbnail

이 글에서는 SingleStoreDB 에서 지원하는 정규표현식(Regular Expression)의 한 사례에 대해 알아 보겠습니다.

다음과 같은 경우에 정규표현식을 이용해 어떻게 BTAG 와 ETAG 사이에 있는 항목값 만을 추출할 수 있을까요?

...BTAG?항목값?ETAG...

가장 쉬운 방법은 (...BTAG?)(항목값 패턴)(?ETAG...) 이렇게 3개의 그룹으로 묶어 Back Reference 를 이용해 두번째 Group 만 추출하면 됩니다.

예를 들어 Oracle 의 경우에는 regexp_substr 함수를 사용해서 아래와 같이 수행합니다.

select regexp_substr('BTAG?dummy1 dummy2 abcBTAG?Boom?ETAG000011111',
                     '(.*BTAG\?)(\w*)(\?ETAG.*)', 
                     1, 1, 'i', 2) as extracted
from dual;

EXTR
----
Boom

또는 regexp_replace 함수를 이용하여 두번째 Back Reference (\2) 만 남기고 나머지를 null 로 치환해도 됩니다.

select regexp_replace('BTAG?dummy1 dummy2 abcBTAG?Boom?ETAG000011111',
                      '(.*BTAG\?)(\w*)(\?ETAG.*)', 
                      '\2', 1, 1 ) as extracted
from dual;

EXTR
----
Boom

MySQL 에서는 ERE(Extended Regular Expression) 만 지원하기 때문에 위와 같은 Back Reference 를 사용할 수 없는 것으로 알고 있습니다.

SingleStoreDB 는 ERE 뿐만 아니라 ARE(Advanced Regular Expression) 도 지원하기 때문에 regexp_replace 를 이용해 동일한 문제를 해결할 수 있습니다.

singlestore> set global regexp_format='advanced';
Query OK, 0 rows affected (0.01 sec)

singlestore> select regexp_replace('BTAG?dummy1 dummy2 abcBTAG?Boom?ETAG000011111',
    ->                       '(.*BTAG\\?)(\\w*)(\\?ETAG.*)',
    ->                       '\\2' ) as extracted;
+-----------+
| extracted |
+-----------+
| Boom      |
+-----------+
1 row in set (0.01 sec)

지금까지 SingleStoreDB 의 ARE 를 이용해 정규표현식을 활용하는 간단한 예제를 설명드렸습니다.

감사합니다.

profile
Database Guy

0개의 댓글