REGEXP_REPLACE
Заменяет подстроки, соответствующие регулярному выражению, на указанную строку.
PostgreSQL 17.9
REGEXP_REPLACE(source, pattern, replacement[, start[, occurrence]][, flags])- [ ]необязательная часть
- source
- Исходная строкаtext
- pattern
- Регулярное выражениеtext
- replacement
- Строка, которая подставляется вместо совпаденияtext
- start
- Позиция, с которой начинается поиск, по умолчанию 1integerНеобязательный
- 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;Замена только второго числа
PostgreSQL 17.9
SELECT REGEXP_REPLACE('a1b22c333', '[0-9]+', '*', 1, 2);Перестановка частей даты
PostgreSQL 17.9
SELECT REGEXP_REPLACE(
'2024-03-08',
'([0-9]{4})-([0-9]{2})-([0-9]{2})',
'\3.\2.\1'
);Пробелы в названиях на подчёркивания
PostgreSQL 17.9
SELECT good_name,
REGEXP_REPLACE(good_name, ' ', '_', 'g') AS slug
FROM Goods
LIMIT 5;Подробности
В replacement можно вставить часть совпадения из скобок: \1 — первая группа, \2 — вторая, а \& — всё совпадение. Без флага g заменяется только первое совпадение. В MySQL по умолчанию заменяются все совпадения, а группа в замене пишется как $1.