如何在 oracle 中使用 REGEXP_REPLACE 函数删除字符串中的一个或多个 '?*' 实例?

How to remove one or more instances of '?*' in a string using REGEXP_REPLACE function in oracle?

我在名为 Line 的列中得到字符 '?*' 一到三次。我需要删除这些字符。如何使用 ReplaceREGEXP_REPLACE

SELECT
    Line, REGEXP_REPLACE(LINE,'[?*]','')--([^\+]+)
FROM
    TABLE
WHERE
    INSTR(LINE,'?*') != 0;

哪里

REGEXP_REPLACE(LINE,'\?*','') 单独替换 ? 并保持 * 不变。

REGEXP_REPLACE(LINE,'?*','') 替换 nothing.

REGEXP_REPLACE(LINE,'[?*]','') 替换所有 ?s 和所有 *s。我只在 ?* 合并为 ?* 时替换。

使用(\?\*)作为模式:

with tab(line) as
( 
 select 'abc?*ghh*?g?l*'  from dual union all
 select '?*U?KJ*H'        from dual union all
 select '*R5?4*&t?*frg?*' from dual
)
select regexp_replace(line,'(\?\*)','') as "Result String"
  from tab;

Result String
-------------
abcghh*?g?l*
U?KJ*H
*R5?4*&tfrg

Demo

如果您需要删除字符串 '?*',您可以使用 replace:

SQL> with test(string) as (
  2      select 'aa?*b?'            from dual union all
  3      select 'a*a?*??b?'         from dual union all
  4      select 'a*a??b???c*?**cc'  from dual union all
  5      select 'aa?b?*?cc?d??*?*?' from dual
  6  )
  7  select string, replace(string, '?*', '') as result
  8  from test;

STRING            RESULT
----------------- ---------------
aa?*b?            aab?
a*a?*??b?         a*a??b?
a*a??b???c*?**cc  a*a??b???c**cc
aa?b?*?cc?d??*?*? aa?b?cc?d??