Как заменить все символы в строке кроме первого и последнего?
Есть фраза - "ПРЫГНИСЮДА". Как написать запрос, чтобы выдавалось П********А?
Писал через:
regexp_replace('ПРЫГНИСЮДА', '.' , '*', 2)
Но не могу понять, как написать на регулярке до последнего символа в строке.
Ответы (2 шт):
Автор решения: SyntaxErrorLineNULL
→ Ссылка
SELECT regexp_replace( 'hellllow', '(^\D{1})(.*)(\D{1}$)', '\1**********\3' ) example FROM dual;
Результат: h**********w
Автор решения: 0xdb
→ Ссылка
Зачем тут регулярные выражения? Взять первый символ, последний символ, между ними подсчитаное (или заданное) кол-во звёздочек, готово:
select
substr (str, 1, 1)||rpad ('*', length (str)-2, '*')||substr (str, -1, 1) res
from t1
Если всё таки регулярным выражением, то так:
select
regexp_replace (str, '.*(.$)', rpad ('*', length (str)-2, '*')||'\1', 2) res
from t1
Запросы выше можно попробовать на db<>fiddle, оба вернут ожидаемый результат:
RES
----------------
1*3
a****f
#******/