Главная > SQL > Заменить подстроку, но только если перед ней пробел или запятая


Заменить подстроку, но только если перед ней пробел или запятая

Для строки «asdfdasf,abs@dev, sdfasdf» надо найти вхождение «abs@» и заменить на «abs@fn», но только в том случае, если перед вхождением запятая или пробел.

select regexp_replace(str, '([, ]abs@)', '\1fn') as val
from (select 'aabs@sdfdasf,abs@dev, sd abs@fasdf' str from dual)
--
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4.0
Connected as apps

SQL> select regexp_replace(str, '([, ]abs@)', '\1fn') as val
  2    from (select 'aabs@sdfdasf,abs@dev, sd abs@fasdf' str from dual);

VAL
--------------------------------------
aabs@sdfdasf,abs@fndev, sd abs@fnfasdf

SQL>

Похожие записи:

  1. Алексей
    30 Сентябрь 2014 в 16:19 | #1

    А можно использовать regexp_replace для замены сразу нескольких выражений? Например, мне надо в строке ссылки найти www, http, https, ssl и все их удалить. это можно сделать одинарным использованием этой функции? или надо будет писать вложенности?

  2. 1 Октябрь 2014 в 14:23 | #2

    @Алексей
    Возможно подойдет такой пример

    select regexp_replace('111www222http333ssl444ssl', '(www)|(http)|(ssl)') from dual

  3. Алексей
    3 Октябрь 2014 в 13:12 | #3

    Да, это помогло, спасибо. Но теперь появился новый вопрос. У меня есть строка вида
    текст ссылки
    Как я могу из этой строки вытащить только «текст ссылки»?
    И могу ли я сделать это для случая, если у меня есть несколько ссылок в одной строке? Например такая:

    текст ссылки
    и если у меня получилась строка » 1 1 1 1″ из одинаковых символов и пробелов
    как я могу их схопнуть, и вывести только один этот символ «1»?
    Я так понял, что это что-то связанное с группами, но не нашел примера.

  4. 6 Октябрь 2014 в 15:05 | #4

    @Алексей
    Ваш пример, к сожалению, не отобразился корректно.
    Значение ссылок можно вырезать так:

    SQL> select regexp_replace(str, '(<a href=".*?">)|(</a>)') as val
      2  from (select '<a href="">Яблоко</a>;<a href="">Груша</a>' str 
      3  from dual)
      4  ;
    VAL
    ------------
    Яблоко;Груша
    

  5. 6 Октябрь 2014 в 15:26 | #5

    @Алексей
    схлопнуть строку ” 1 1 1 1″ можно так:

    select trim(regexp_replace(str||' ', '([^ ]+ )\1*','\1')) as val
    from (select ' 1 1 1 1' str from dual)
    

  1. 15 Январь 2011 в 22:59 | #1