我有一个像'11dd $%e11!@h'
的字符串我是否可以使用正则表达式从上面的字符串中删除特殊字符。
特殊字符消除后,字符和数字应该存在。
另一个要求是 string是'@#45gr @@ 3。查询应该给我'@#@@''
答案 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 $%!@