替换 PL/SQL 中的几行正则表达式函数

Posted

技术标签:

【中文标题】替换 PL/SQL 中的几行正则表达式函数【英文标题】:replace several line regexp function in PL/SQL 【发布时间】:2014-09-05 12:14:34 【问题描述】:

有没有办法从一个字符串中删除几行? 我有一个 varchar 值,其中包含大量字符串:

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;

我需要删除第一个'style'标签和最后一个'/style'标签之间的行吗? 我该如何实施?用什么“some_pattern”?

【问题讨论】:

【参考方案1】:

您不需要使用 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>

【讨论】:

你给了我一个好主意。非常感谢。我已经实现了我想要的。【参考方案2】:

正则表达式的解决方案:

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">

【讨论】:

以上是关于替换 PL/SQL 中的几行正则表达式函数的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PL/SQL 正则表达式将 HTML 标记及其内容替换为相同数量的“?s”?

在 PL/SQL Developer Find & Replace 中使用正则表达式模式时,如何访问匹配的对象以进行替换?

PL/SQL 中的正则表达式

SQL 基础正则表达式(二十三)

PL/SQL Oracle 正则表达式对于零的出现不起作用

PL/SQL 正则表达式检查