正则表达特殊字符消除

时间:2018-02-22 05:50:21

标签: sql oracle

我有一个像'11dd $%e11!@h'

的字符串

我是否可以使用正则表达式从上面的字符串中删除特殊字符。

特殊字符消除后,字符和数字应该存在。

另一个要求是 string是'@#45gr @@ 3。查询应该给我'@#@@''

1 个答案:

答案 0 :(得分:1)

select '11dd$%e11!@h' as input, regexp_replace('11dd$%e11!@h', '[^[:alnum:]]') as output
from   dual
;

INPUT         OUTPUT 
------------  --------
11dd$%e11!@h  11dde11h

[:alnum:]是所有字母(标准ASCII字母,大小写和大写字母)和所有数字的简写。 [^ ... ]表示除...之外的所有内容。所以,这将取代除了字母和数字之外的所有内容......没有(因为我们没有给REGEXP_REPLACE提供第三个参数)。

编辑:OP在问题中添加了第二部分。

如果分配是仅删除所有字母数字字符,并保留其他所有字符,只需从正则表达式中删除^

select '11dd$%e11!@h' as input, regexp_replace('11dd$%e11!@h', '[[:alnum:]]') as output
from   dual
;

INPUT         OUTPUT
------------  ------
11dd$%e11!@h  $%!@