0

我想替换除第一次出现之外的所有字符串,使用regexp_replace. 下面的查询将仅替换第二次出现。

select 'This is test STRING STRING some text STRING some more text'
  from dual 

select regexp_replace('This is test STRING STRING some text STRING some more text',
                      'STRING',
                      'REPLACED-STRING' ,
                      1,
                      2)
  from dual

结果是,

这是测试 STRING REPLACED-STRING some text STRING some more text

但我需要这样的结果。

这是测试 STRING REPLACED-STRING some text REPLACED-STRING some more text

4

1 回答 1

0

我会REGEXP_REPLACEREGEXP_INSTR. 这个想法是使用从位置开始的返回替换所有出现(在这里您指定它应该返回搜索字符串的第二次出现)。REGEXP_REPLACEREGEXP_INSTR

这个片段说明了这个想法:

regexp_replace(
  'This is test STRING STRING some text STRING some more text',
  'STRING',
  'REPLACED-STRING', 
  regexp_instr(
    'This is test STRING STRING some text STRING some more text',
    'STRING',
    1,2,1
  ), 
  0
)

注意:请仅将其理解为入门 - 我知道它可以优化(并且应该)。我希望它有所帮助;-) *约斯特

于 2013-08-26T07:43:29.077 回答