Справочник по функциям

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})'
	);
regexp_match
["2024","03","08"]

Логин и домен из email

PostgreSQL 17.9
SELECT email,
	REGEXP_MATCH(email, '^(.+)@(.+)$') AS parts
FROM Users
LIMIT 5;
emailparts
barjam@hotmail.com["barjam","hotmail.com"]
tellis@me.com["tellis","me.com"]
metzzo@superhotmail.com["metzzo","superhotmail.com"]
ralamosm@verizon.net["ralamosm","verizon.net"]
barjam@hotmail.com["barjam","hotmail.com"]

Домен как элемент массива

PostgreSQL 17.9
SELECT email,
	(REGEXP_MATCH(email, '@(.+)$')) [1] AS domain
FROM Users
LIMIT 5;
emaildomain
barjam@hotmail.comhotmail.com
tellis@me.comme.com
metzzo@superhotmail.comsuperhotmail.com
ralamosm@verizon.netverizon.net
barjam@hotmail.comhotmail.com

Подробности

Если в выражении есть группы в скобках, массив содержит по элементу на каждую группу, иначе — один элемент со всем совпадением. Отдельный элемент берётся по номеру: (REGEXP_MATCH(...))[1]. Флаг g не поддерживается: все совпадения возвращает REGEXP_MATCHES(..., 'g') — по строке результата на каждое. Чтобы получить совпадение сразу строкой, а не массивом, подойдёт REGEXP_SUBSTR, которая есть в PostgreSQL начиная с версии 15.

Смотрите также