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

REGEXP_REPLACE

Заменяет подстроки, соответствующие регулярному выражению, на указанную строку.

PostgreSQL 17.5
REGEXP_REPLACE(source, pattern, replacement[, start[, occurrence]][, flags])

Параметры

sourcetext
Исходная строка
patterntext
Регулярное выражение
replacementtext
Строка, которая подставляется вместо совпадения
startintegerнеобязательный
Позиция, с которой начинается поиск, по умолчанию 1
occurrenceintegerнеобязательный
Номер заменяемого совпадения, 0 — все совпадения, по умолчанию первое
flagstextнеобязательный
Флаги: g — заменить все совпадения, i — без учёта регистра

Возвращаемое значение

Строка с заменой; без флага g и параметра occurrence заменяется только первое совпадение

Примеры

Замена без флага g и с ним

PostgreSQL 17.5
SELECT REGEXP_REPLACE('sql-academy-2024', '[0-9]', '*') AS first_only,
	REGEXP_REPLACE('sql-academy-2024', '[0-9]', '*', 'g') AS all_matches;
first_onlyall_matches
sql-academy-*024sql-academy-****

Замена только второго числа

PostgreSQL 17.5
SELECT REGEXP_REPLACE('a1b22c333', '[0-9]+', '*', 1, 2);
regexp_replace
a1b*c333

Перестановка частей даты

PostgreSQL 17.5
SELECT REGEXP_REPLACE(
		'2024-03-08',
		'([0-9]{4})-([0-9]{2})-([0-9]{2})',
		'\3.\2.\1'
	);
regexp_replace
08.03.2024

Пробелы в названиях на подчёркивания

PostgreSQL 17.5
SELECT good_name,
	REGEXP_REPLACE(good_name, ' ', '_', 'g') AS slug
FROM Goods
LIMIT 5;
good_nameslug
apartment feeapartment_fee
phone feephone_fee
breadbread
milkmilk
red caviarred_caviar

Подробности

В replacement можно вставить часть совпадения из скобок: \1 — первая группа, \2 — вторая, а \& — всё совпадение. Без флага g заменяется только первое совпадение. В MySQL по умолчанию заменяются все совпадения, а группа в замене пишется как $1.

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