使用regex_replace删除特殊字符时如何不替换“]”

时间:2016-05-17 06:11:59

标签: sql oracle regexp-replace

我正在尝试从表格中的评论栏中删除一些特殊字符。我使用了下面的语句,但它似乎删除了']',即使它位于^[not]列表中。

UPDATE TEST 
set comments=REGEXP_REPLACE(
               comments,
               '[^[a-z,A-Z,0-9,[:space:],''&'','':'',''/'',''.'',''?'',''!'','']'']]*',
               ' '
               );

表数据包含以下内容:

[SYSTEM]:Do you have it in stock? 😊

我的要求是:

[SYSTEM]:Do you have it in stock?

2 个答案:

答案 0 :(得分:1)

你的正则表达式有两个错误:

  1. 请勿将字符放在引号中,不要用逗号分隔。
  2. 删除内部方括号。
  3. 将最后的方括号放在列表中的第一个方括号中。固定正则表达式:

    UPDATE TEST set comments=REGEXP_REPLACE(comments,'[^]a-zA-Z0-9[:space:]&:/.?!]*',' ');
    

答案 1 :(得分:0)

我的尝试,我只是删除了逗号,将“接受”字符放在最初的“不”(没有括号)之后。 括号中有一个特例:https://dba.stackexchange.com/a/109294/6228

select REGEXP_REPLACE(
         '[ION] are varză murată.',
         '[^][a-zA-Z0-9[:space:]&:/,.?!]+',
         ' ') 
from dual;

Result:
[ION] are varz  murat .