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