【问题标题】:oracle regexp_replace delete last occurrence of special characteroracle regexp_replace 删除最后一次出现的特殊字符
【发布时间】:2015-12-09 13:19:24
【问题描述】:

我有一个 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)
           '''')
           /;
       ';

任何帮助。

【问题讨论】:

  • 这里不是很清楚你在问什么。请花时间格式化您的问题并以清晰的方式提出,以便有人可以帮助您。
  • 请解释您要做什么。为什么将 Oracle Text API 调用和 DDL 语句作为字符串?为什么要在同一个执行空间中挖掘 PL/SQL 调用和 DDL?如果这些是脚本,为什么要使用 REGEXP_REPLACE() 来处理它们,而不是使用文本编辑器(可能支持正则表达式的编辑器)来编辑它们?

标签: oracle regexp-replace


【解决方案1】:

有句古话:“有些人,当遇到问题时,会想“我知道,我会用正则表达式。”现在他们有两个问题”

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

分号: 使用 INSTR 查找“/”的最后一次出现,称之为 P1。
结果 = Substr 从位置 1 到 P1||';'||substr 从 P1+1 到字符串结尾

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

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

【讨论】:

    猜你喜欢
    • 2020-04-25
    • 1970-01-01
    • 1970-01-01
    • 2017-12-07
    • 2012-06-05
    • 1970-01-01
    • 2015-06-19
    • 1970-01-01
    • 2013-08-21
    相关资源
    最近更新 更多