Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 regexp_replace. Ищем одно, заменяем другое.  [new]
dimacrat
Member

Откуда: Москва
Сообщений: 305
Помогите плиз. С регулярными выражениями никак не могу подружиться.
Требуется сделать замену в строке следующим образом:
находим в поле символ ‘=’ или ‘D’ , после этого символа отсчитываем 7 цифр и хвост маскируем - заменяем все символы на такое же количество звездочек.
Пример:
Было 123=12345670987654
Стало 123=1234567*******

Было 1234D7654321111
Стало 1234D7654321***

with t as
(select '123=12345670987654' a, '123=1234567*******' b from dual
union all
select  '1234D7654321111','1234D7654321***' from dual
)
select a,
regexp_replace(a,'','') , -- ???
b
from t;

Спасибо!
8 дек 11, 17:24    [11731260]     Ответить | Цитировать Сообщить модератору
 Re: regexp_replace. Ищем одно, заменяем другое.  [new]
Elic
Member

Откуда:
Сообщений: 29980
dimacrat
заменяем все символы на такое же количество звездочек.
Регулярками такого сделать нельзя.
instr, +1+7, substr, rpad, length
8 дек 11, 17:28    [11731325]     Ответить | Цитировать Сообщить модератору
 Re: regexp_replace. Ищем одно, заменяем другое.  [new]
dimacrat
Member

Откуда: Москва
Сообщений: 305
Elic,

Спасибо.
Да, такой вариант уже есть.
Думал, можно сделать красиво :)
8 дек 11, 17:32    [11731387]     Ответить | Цитировать Сообщить модератору
 Re: regexp_replace. Ищем одно, заменяем другое.  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
dimacrat
Elic,

Спасибо.
Да, такой вариант уже есть.
Думал, можно сделать красиво :)

да даже и не то, чтобы регулярками нельзя. одной нельзя.
with t as
(select '123=12345670987654' a, '123=1234567*******' b from dual
union all
select  '1234D7654321111','1234D7654321***' from dual
)
select a, b, regexp_substr(a,'(.*?[D=]\d{7})')||regexp_replace(
            regexp_replace(a,'(.*?[D=]\d{7})'),'.','*') c
from t;

но вот красоты тут (имхо) - гораздо меньше, чем без регулярок
8 дек 11, 17:53    [11731627]     Ответить | Цитировать Сообщить модератору
 Re: regexp_replace. Ищем одно, заменяем другое.  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
чуть короче
 rpad(regexp_substr(a,'(.*?[D=]\d{7})'),length(a),'*') d
8 дек 11, 17:57    [11731672]     Ответить | Цитировать Сообщить модератору
 Re: regexp_replace. Ищем одно, заменяем другое.  [new]
dimacrat
Member

Откуда: Москва
Сообщений: 305
orawish,

Огромное спасибо!
9 дек 11, 13:05    [11735912]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить