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

REGEXP_REPLACE

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

PostgreSQL 17.9
REGEXP_REPLACE(source, pattern, replacement[, start[, occurrence]][, flags])
  • [ ]необязательная часть
source
Исходная строка
text
pattern
Регулярное выражение
text
replacement
Строка, которая подставляется вместо совпадения
text
start
Позиция, с которой начинается поиск, по умолчанию 1
integerНеобязательный
occurrence
Номер заменяемого совпадения, 0 — все совпадения, по умолчанию первое
integerНеобязательный
flags
Флаги, например 'gi' — все совпадения без учёта регистра
textНеобязательный
bcegimnpqstwx

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

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

Примеры

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

PostgreSQL 17.9
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.9
SELECT REGEXP_REPLACE('a1b22c333', '[0-9]+', '*', 1, 2);
regexp_replace
a1b*c333

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

PostgreSQL 17.9
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.9
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.

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