REGEXP_MATCH
Аналог в MySQL:
Возвращает массив подстрок из первого совпадения с регулярным выражением.
PostgreSQL 17.9
REGEXP_MATCH(string, pattern[, flags])- [ ]необязательная часть
- string
- Строка, в которой выполняется поискtext
- pattern
- Регулярное выражениеtext
- flags
- Флаги, например i — без учёта регистраtextНеобязательныйbceimnpqstwx
Возвращаемое значение
Массив строк (text[]) из первого совпадения; NULL, если совпадения нет
Примеры
Части даты из текста
PostgreSQL 17.9
SELECT REGEXP_MATCH(
'Order from 2024-03-08',
'([0-9]{4})-([0-9]{2})-([0-9]{2})'
);Логин и домен из email
PostgreSQL 17.9
SELECT email,
REGEXP_MATCH(email, '^(.+)@(.+)$') AS parts
FROM Users
LIMIT 5;Домен как элемент массива
PostgreSQL 17.9
SELECT email,
(REGEXP_MATCH(email, '@(.+)$')) [1] AS domain
FROM Users
LIMIT 5;Подробности
Если в выражении есть группы в скобках, массив содержит по элементу на каждую группу, иначе — один элемент со всем совпадением. Отдельный элемент берётся по номеру: (REGEXP_MATCH(...))[1]. Флаг g не поддерживается: все совпадения возвращает REGEXP_MATCHES(..., 'g') — по строке результата на каждое. Чтобы получить совпадение сразу строкой, а не массивом, подойдёт REGEXP_SUBSTR, которая есть в PostgreSQL начиная с версии 15.