2015-09-13 214 views
0

中最後一次出現我有一個PL SQL字符串如下:甲骨文REGEXP_REPLACE刪除特殊字符

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) 
      '''') 
      /; 
     '; 

任何幫助。

+0

這是不是很清楚你在這裏問什麼。請花時間格式化您的問題並以清晰的方式呈現,以便有人能夠幫助您。 – toddlermenot

+0

請解釋你正在嘗試做什麼。爲什麼你將Oracle Text API調用和DDL語句作爲字符串?爲什麼你要在同一個執行空間中執行PL/SQL調用和DDL?如果這些腳本爲什麼要用REGEXP_REPLACE()來代替它們,而不是用文本編輯器編輯它們(可能是支持正則表達式的)? – APC

回答

1

有一個古老的諺語:「有些人,當遇到一個問題,認爲‘我知道,我將使用正則表達式’現在他們有兩個問題」

除非你是一個面對。問題確實需要正則表達式,我建議使用基本的字符串操作函數。

分號: 使用INSTR查找'/'的最後一次出現,稱爲P1。
結果= SUBSTR從位置1到P1 ||「;」 ||通過向最終的串

參數替代從P1 + 1 SUBSTR: 使用INSTR找到參數列表開始的地方(即,找到「字符串中的參數(」在你的字符串中)「和」結束(可能是最後一個右括號)「)。稱這些P2和P3。

Result = substr from 1 to P2 || REPLACE(從P2 + 1到P3-1,'''',''''''')} ||的子字符串從P3到字符串末尾的substr