Oracle reg_replace仅替换匹配并保留字母字符

时间:2015-08-12 13:07:06

标签: oracle plsql preg-replace

我陷入困境,没有找到一两行解决方案。

其实我有一个字符串,例如"罗密欧( - & -must 123)死亡(但123)现在不是"我希望输出像"罗密欧(必须)死(但)现在不是"

我想在oracle中使用regreplace在一行或两行中实现相同的功能。我知道它可以通过使用多线编码实现,但需要有效的方式。

我试过这个但没有工作

select
  (REGEXP_REPLACE('Romeo (-& -must 123) die (but123) not now', '\((.*?)\)', '[^A-Z'']')) "REGEXP_REPLACE"
  FROM dual;

如果有人可以帮助我,那就太棒了。

1 个答案:

答案 0 :(得分:1)

您的样本量很小,但以下正则表达式可以解决您的问题。它可能会打破一些其他输入,但请不要指望我们猜测你的模式。

正则表达式解释说:

  1. \(匹配开幕式
  2. .*?匹配任何字符零次或多次非贪婪
  3. (启动子表达式。稍后在替换字符串中使用\1反向引用。
  4. [[:alpha:]]+匹配一个或多个字母字符
  5. ) end subexpression
  6. .*?匹配任何字符零次或多次非贪婪
  7. \)匹配闭幕式
  8. 示例

    with
    t(orig) as (
      select 'Romeo (-& -must 123) die (but123) not now' from dual
    )
    select
     orig
    ,regexp_replace(orig, '\(.*?([[:alpha:]]+).*?\)', '(\1)') as replaced
    from t
    ;
    

    <强>输出

    ORIG                                      REPLACED
    ----------------------------------------- ------------------------------
    Romeo (-& -must 123) die (but123) not now Romeo (must) die (but) not now