oracle regexp_replace 删除最后一次出现的特殊字符
oracle regexp_replace delete last occurrence of special character
我有一个 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)
'''')
/;
';
任何帮助。
有一句老话:"Some people, when confronted with a problem, think "我知道,我会用正则表达式。”现在他们有两个问题
除非您遇到真正需要正则表达式的问题,否则我建议您使用基本的字符串操作函数。
分号:
使用 INSTR 查找最后一次出现的“/”,调用此 P1。
结果 = 从位置 1 到 P1 的 Substr||';'||从 P1+1 到字符串结尾的 substr
参数替换:
使用 INSTR 查找参数列表的开始位置(即在字符串中找到 "parameters(")和结束位置(大概是字符串中最后一个右括号“)”)。调用这些 P2 和 P3。
结果 = 从 1 到 P2 的 substr || REPLACE(substr from P2+1 through P3-1,'''','''''''') ||从 P3 到字符串结尾的 substr
我有一个 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)
'''')
/;
';
任何帮助。
有一句老话:"Some people, when confronted with a problem, think "我知道,我会用正则表达式。”现在他们有两个问题
除非您遇到真正需要正则表达式的问题,否则我建议您使用基本的字符串操作函数。
分号:
使用 INSTR 查找最后一次出现的“/”,调用此 P1。
结果 = 从位置 1 到 P1 的 Substr||';'||从 P1+1 到字符串结尾的 substr
参数替换: 使用 INSTR 查找参数列表的开始位置(即在字符串中找到 "parameters(")和结束位置(大概是字符串中最后一个右括号“)”)。调用这些 P2 和 P3。
结果 = 从 1 到 P2 的 substr || REPLACE(substr from P2+1 through P3-1,'''','''''''') ||从 P3 到字符串结尾的 substr