使用regexp\u replace转义单引号

使用regexp\u replace转义单引号,regex,oracle11g,Regex,Oracle11g,我需要用输入列中的空格替换任何特殊字符。此外,还需要抑制任何单引号 我尝试了这个方法来替换特殊字符,但是,它不会抑制单引号 来自数据库列的输入字符串: “SEE’S CANDY?SHOPS INCORPORATED” 如果不考虑单引号,则W满足第一个条件。 select regexp_replace('SEES CANDY?SHOPS INCORPORATED', '\W', ' ') from dual; Output: SEES CANDY SHOPS INCORPORATED 但是,需

我需要用输入列中的空格替换任何特殊字符。此外,还需要抑制任何单引号

我尝试了这个方法来替换特殊字符,但是,它不会抑制单引号

来自数据库列的输入字符串: “SEE’S CANDY?SHOPS INCORPORATED”

如果不考虑单引号,则W满足第一个条件。

select regexp_replace('SEES CANDY?SHOPS INCORPORATED', '\W', ' ') from dual;

Output: SEES CANDY SHOPS INCORPORATED
但是,需要:

看到糖果店合并,同时考虑通过转义/抑制单个报价

select regexp_replace('SEES''CANDY?SHOPS_INCORPORATED123', '[^[:alnum:]''_]', ' ') from dual;
[:alnum::
字母数字字符。包括字母和数字

\W
非单词字符(不是字母、数字、下划线)

删除单引号,然后用空格替换\W:

select regexp_replace(replace(s, ''''), '\W', ' ') 
from (select q'[SEE'S candy?shops_incorporated123]' s from dual);

q'[]'
只是一个Oracle引号操作符(允许您在括号内使用单引号,而无需为了转义而将引号加倍)

谢谢。但是,您正在通过读取一个引号来操作inout字符串,这当然是可行的。输入来自数据库列。有没有一种方法可以通过程序化的方式做到这一点,首先抑制单引号。@Casey我不明白你的问题。我认为您需要替换除单个报价之外的所有报价。因此,您需要删除所有单引号,然后用空格替换其他特殊符号。我说得对吗?是的。单引号也应该消失,除非它们应该被抑制。在上面的示例中,SEE应该变成SEES。下一步是使用\W将特殊字符替换为空格,就像我前面所做的那样。谢谢。但是,当我将它与双线程一起使用时,它就工作了。但是,当我把它添加到输入列时,我可能把它搞砸了。尝试了此操作,但无效:从表A中选择replace('q'['| | | | |'],'');它也会打印q.@Casey您只需要这样:“从您的_表中选择regexp_replace(replace(您的_列_名称,''),'\W',''”)“仅供参考,将单个引号加倍将在sql中转义第二个引号。使用\\转义不会。对于来这里寻找答案的所有人(如我lol)。