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