oracle regexp_replace删除最后一次出现的特殊字符

时间:2015-09-13 12:17:24

标签: oracle regexp-replace

我有一个pl sql字符串,如下所示:

String := 'ctx_ddl.add_stopword(''"SHARK_IDX19_SPL"'',''can''); 

       create index "SCOTT"."SHARK_IDX2"
       on "SCOTT"."SHARK2"
       ("DOC")
          indextype is ctxsys.context
          parameters(''
            datastore       "SHARK_IDX2_DST"
           filter          "SHARK_IDX2_FIL"
           section group   "SHARK_IDX2_SGP"
           lexer           "SHARK_IDX2_LEX"
           wordlist        "SHARK_IDX2_WDL"
           stoplist        "SHARK_IDX2_SPL"
           storage         "SHARK_IDX2_STO"
           sync (every "SYSDATE+(1/1)" memory 67108864)
           '')
           /
       ';

我必须在最后一次搜索' /'并添加';'它。此外,我需要转义参数中预设的引号('')以获得额外的引号。我需要像

这样的输出
String := 'ctx_ddl.add_stopword(''"SHARK_IDX19_SPL"'',''can''); 

       create index "SCOTT"."SHARK_IDX2"
       on "SCOTT"."SHARK2"
       ("DOC")
          indextype is ctxsys.context
          parameters(''''
            datastore       "SHARK_IDX2_DST"
           filter          "SHARK_IDX2_FIL"
           section group   "SHARK_IDX2_SGP"
           lexer           "SHARK_IDX2_LEX"
           wordlist        "SHARK_IDX2_WDL"
           stoplist        "SHARK_IDX2_SPL"
           storage         "SHARK_IDX2_STO"
           sync (every "SYSDATE+(1/1)" memory 67108864)
           '''')
           /;
       ';

任何帮助。

1 个答案:

答案 0 :(得分:1)

有一句古老的谚语:“有些人在面对问题时会想”我知道,我会使用正则表达式。“现在他们有两个问题”

除非您遇到真正需要正则表达式的问题,否则我建议您使用基本的字符串操作函数。

<强>半结肠: 使用INSTR查找'/'的最后一次出现,调用此P1 结果=从位置1到P1 ||'的子网;从P1 + 1到字符串结尾的'|| substr

参数替换: 使用INSTR查找参数列表的开始位置(即在字符串中查找“参数(”)和结束(可能是最后一个右括号“)”。称这些为P2和P3。

结果=从1到P2 ||的substr REPLACE(从P2 + 1到P3-1的子网,'''',''''''''|| substr从P3到字符串结尾