Рядкилише PostgreSQL

REGEXP_MATCHES

Витягає з рядка частини, що підходять під регулярний вираз.

Синтаксис

REGEXP_MATCHES(<текст>, '<шаблон>')
REGEXP_MATCHES(<текст>, '<шаблон>', '<прапорці>')

Повертає масив зі знайденим: якщо в шаблоні є дужки-групи — по елементу на кожну групу. Без прапорця 'g' шукає лише перший збіг, з ним — усі, і кожен збіг стає окремим рядком результату. Щоб просто дістати перший збіг текстом, простіше REGEXP_SUBSTR.

Перший збіг — масивом
SELECT REGEXP_MATCHES('Order 1234, box 56', '[0-9]+') AS first_match;
first_match
["1234"]
Усі числа — окремими рядками
SELECT REGEXP_MATCHES('Order 1234, box 56', '[0-9]+', 'g') AS match;
match
["1234"]
["56"]
Логін і домен — групамиСкладніше
SELECT (REGEXP_MATCHES('emma@example.com', '(.+)@(.+)'))[1] AS login,
(REGEXP_MATCHES('emma@example.com', '(.+)@(.+)'))[2] AS domain;
logindomain
emmaexample.com

Кожна пара дужок у шаблоні — окрема група, а [1] і [2] беруть їх із масиву.

Зверни увагу

Результат — масив, навіть коли знайдено одне значення: {1234}. Щоб отримати текст, бери елемент [1] або REGEXP_SUBSTR.

Якщо збігу нема, REGEXP_MATCHES не дає NULL, а не дає жодного рядка — і рядок таблиці зникне з результату. REGEXP_SUBSTR у такому разі повертає NULL і рядок не губить.