select '11dd$%e11!@h' as input, regexp_replace('11dd$%e11!@h', '[^[:alnum:]]') as output
from dual
;
INPUT OUTPUT
------------ --------
11dd$%e11!@h 11dde11h
[:alnum:]
je zkratka pro všechna písmena (standardní písmena ASCII, malá a velká písmena) a všechny číslice. [^ ... ]
znamená vše KROMĚ ...
. Takže toto nahradí vše KROMĚ písmen a číslic... ničím (protože jsme třetí argument nedali REGEXP_REPLACE).
UPRAVIT :OP přidal k otázce druhou část.
Pokud je úkolem odstranit POUZE všechny alfanumerické znaky a zachovat vše ostatní, jednoduše odstraňte ^
z regulárního výrazu.
select '11dd$%e11!@h' as input, regexp_replace('11dd$%e11!@h', '[[:alnum:]]') as output
from dual
;
INPUT OUTPUT
------------ ------
11dd$%e11!@h $%!@