2014-09-05 19 views
0

有什麼辦法從字符串中刪除幾行? 我有在它大量字符串的VARCHAR值:替換PL/SQL中的幾行正則表達式函數

declare 
    v_txt varchar(4000); 
    v_txt2 varchar(4000); 
begin 
    v_txt := '<Html> 
      <Head> 
      <meta charset="windows-1251" /> 
      <style> 
      div {text-indent: 40px;} 
      </style> 
      <style> 
      p {text-indent: 40px;} 
      </style> 
      </Head> 
      <Body> 
      <font face="Arial">' 

    select regexp_replace(v_txt, some_pattern, '') into v_txt2 from dual; 
    dbms_output.put_line(v_txt2); 
end; 

我需要位於第一「風格」的標籤,最後「/風格」標籤之間的線路被刪除? 我如何實現它?用什麼「some_pattern」?

回答

2

你並不需要使用REGEXP:

with t(val) as(
    select '<Html> 
      <Head> 
      <meta charset="windows-1251" /> 
      <style> 
      div {text-indent: 40px;} 
      </style> 
      <style> 
      p {text-indent: 40px;} 
      </style> 
      </Head> 
      <Body> 
      <font face="Arial">' from dual 
) 
select substr(val, instr(val, '<style>'), instr(val, '</style>', -1, 1) - instr(val, '<style>', 1, 1) + length('</style>')) val 
    from t 

             VAL 
--------------------------------------------------------------------------------- 
<style> div {text-indent: 40px;} </style> <style> p {text-indent: 40px;} </style> 
+0

你給了我一個不錯的主意。非常感謝。我已經達到了我想要的。 – jacksonslsmg4 2014-09-05 13:06:15

+0

不客氣。 – zaratustra 2014-09-05 13:19:27

1

解決方案與正則表達式:

select regexp_replace(v_txt, '<style>.*</style>', '[REPLACED]', 1, 1, 'n') into v_txt2 from dual; 

結果是:

<Html> 
      <Head> 
      <meta charset="windows-1251" /> 
      [REPLACED] 
      </Head> 
      <Body> 
      <font face="Arial">