select '11dd$%[email protected]' as input, regexp_replace('11dd$%[email protected]', '[^[:alnum:]]') as output
from dual
;
INPUT OUTPUT
------------ --------
11dd$%[email protected] 11dde11h
[:alnum:]
jest skrótem dla wszystkich liter (standardowe litery ASCII, małe i duże) oraz wszystkich cyfr. [^ ... ]
oznacza wszystko Z WYJĄTKIEM ...
. Zastąpi to wszystko, Z WYJĄTKIEM liter i cyfr, na... nic (ponieważ nie podaliśmy trzeciego argumentu funkcji REGEXP_REPLACE).
EDYTUJ :OP dodał drugą część do pytania.
Jeśli zadaniem jest usunięcie TYLKO wszystkich znaków alfanumerycznych i zachowanie wszystkiego innego, po prostu usuń ^
z wyrażenia regularnego.
select '11dd$%[email protected]' as input, regexp_replace('11dd$%[email protected]', '[[:alnum:]]') as output
from dual
;
INPUT OUTPUT
------------ ------
11dd$%[email protected] $%[email protected]