regexp_replace для greenplum (оставить несколько первых и несколько последних символов, остальное заменить *)

Рейтинг: 0Ответов: 1Опубликовано: 31.03.2023

Прошу помощи в разборе регулярки по маскированию текста: есть входной текст "my masking string" хочу получить "my*************ng"

Подобрал выражение: select regexp_replace('my masking string', '(?<=..).(?=..)', '*', 'g'); но это выражение работает только для postgresql

greenplum показывает ошибку 'invalid regular expression: quantifier operand invalid' опытным путем понял, что ошибку вызывают знак '?' в регулярке пока не пойму чем его заменить, или как пересобрать выражение.

Ответы

▲ 1Принят

Можно обойтись встроенными функциями. И работать будет быстрее, чем с регулярками, если говорить про большой объем данных.

select substr('my masking string',1,2)
|| repeat('*',length('my masking string')-3)
|| substr('my masking string',length('my masking string')-1);