REGEXP_REPLACE 表达问题

REGEXP_REPLACE expression issue

我在下面得到了一些 sql 脚本来删除单词之间的单词,但它会找到最后一次出现的 my (/hide) 而不是第一次出现的。需要帮助才能按预期获得输出。谢谢。

select regexp_replace('(hide)it(/hide)should be show(hide)my(/hide) text',
       '^\(hide\).*\(/hide\)', '') "TESTING" 
  from dual;

我预计输出将是:

should be show text

但实际输出是:

text

如果我的数据位于数据类型为 clob 的列之一。目前我使用下面的脚本来 select。例如我的 table 是 testing_table 列 desc_str 和 data_type 的 clob 其中包含值 '(hide)it(/hide)should be show(hide)my (/隐藏) 文本';

select trim(to_char(regexp_replace(desc_str,'^\(hide\).*\(/hide\)',''))) as desc 
  from testing_table 
 where OOE_FP_SS_ID = $id;

根据你的例子:

SQL> with test (col) as
  2    (select '(hide)it(/hide)should be show(hide)my(/hide) text' from dual)
  3  select regexp_replace(col, '\(hide\)\w+\(/hide\)', '') result
  4  from test;

RESULT
-------------------
should be show text

SQL>

[编辑:CLOB]

您要求的是 CLOB。这是一个例子:

SQL> create table test (desc_str clob);

Table created.

SQL> insert into test values ('(hide)it(/hide)should be show(hide)my(/hide) text');

1 row created.

SQL> select regexp_replace(desc_str, '\(hide\)\w+\(/hide\)', '') result from test;

RESULT
--------------------------------------------------------------------------------
should be show text

SQL>

另一个例子:

SQL> with test (desc_str) as
  2    (select '(hide)ItemId: 4334(/hide)|(hide)Description Item - SubType:(/hide) Name - Item|(irow)Price Value: MYR 1,668' from dual)
  3  select regexp_replace(desc_str, '\(hide\).+?\(/hide\)', '') result from test;
                                                ^
RESULT                                          | this question mark was missing
------------------------------------------
| Name - Item|(irow)Price Value: MYR 1,668

SQL>