Примеры использования регулярных выражений.
REGEXP_REPLACE
1. Замена всех пробелов в строке на двойной пробел.
with t(fname) as
(select 'Hello, dear friend! Nice to see you!' from dual)
select regexp_replace(fname, '[ ]+', ' ') from t;</pre>
<pre>fname
--------------------------------------------------
Hello, dear friend! Nice to see you!
2. Замена первых n-символов в строке на другие.
with t(fname) as
(select 'Regular expressions is very easy' from dual)
select regexp_replace(fname, lpad(fname, 7), 'Arithmetic') from t;
FNAME
-----------------------------------
Arithmetic expressions is very easy
3. Замена n-ого символа(ов) в строке, начиная с позиции k
with t(fname) as
(select 1000340082145076 from dual)
select regexp_replace(fname, '..', '21', 5, 1) fname from t;
FNAME
----------------
1000210082145076
4. Получить часть строки после первой запятой
with t(fname) as
(select 'gfdgh ввап1; 567, 23425' from dual)
select regexp_replace(fname, '^[^,]*,') fname from t;
FNAME
------
23425
5. Удаляем из строки html tags
with t(fname) as
(select '<span style="color: rgb(255, 255, 153);">Hello World!</span><br style="color: rgb(255, 255, 153);"><span style="color: rgb(255, 255, 153);">Listen to your heart!</span><br>' from dual)
select regexp_replace(fname, '<[^>]*>', ' ') fname from t;
FNAME
---------------------------------------
Hello World! Listen to your heart!
6. Вырезать значение из двойных ковычек
with t(fname) as
(select 'LTD "GROUP "BIG WORLD" Las Vegas' from dual)
select replace(regexp_replace(fname, '^([^"]*"(.*)"[^"]*|(.*))$', '\2\3'), '"') fname from t;
FNAME
----------------
GROUP BIG WORLD
REGEXP_SUBSTR
1. Вырезать часть строки по заданному шаблону
with t(fname) as
(select '(KERAMIN."user_role_auth"(p_username=>:USER_NAME, p_groupname=>'||chr(39)||'public'||chr(39)||', p_level=>5, p_app_id=>:APP_ID) or KERAMIN."user_role_auth"(p_username=>:USER_NAME, p_groupname=>'||chr(39)||'ADMINISTRATORS'||chr(39)||', p_level=>10, p_app_id=>:APP_ID) or KERAMIN."user_role_auth"(p_username=>:USER_NAME, p_groupname=>'||chr(39)||'users'||chr(39)||', p_level=>15, p_app_id=>:APP_ID))' fname from dual)
select regexp_substr(fname,'KERAMIN."user_role_auth"\(p_username=>:USER_NAME, p_groupname=>[^,]+, p_level=>10, p_app_id=>:APP_ID\)', 1, 1) fname from t;
FNAME
--------------------------------------------------------------------------------
KERAMIN."user_role_auth"(p_username=>:USER_NAME, p_groupname=>'ADMINISTRATORS',
p_level=>10, p_app_id=>:APP_ID)
2. Делим одну строку на несколько строк с использованием разделителя (например, <,>)
with t as
(select 'O,r,a,c,l,e' fname from dual)
select regexp_substr(fname,'[^,]+', 1, level) fname from t
connect by regexp_substr(fname, '[^,]+', 1, level) is not null;
FNAME
-----------
O
r
a
c
l
e
REGEXP_COUNT
1. Подсчет количества цифр в строке
with t(fname) as
(select '12 mgf45, fhfh-565gh hgh56 66' fname from dual UNION ALL
select 'fd8g78df7g8ghorhegy g rgtueriogti' fname from dual UNION ALL
select '5768hf hgh565 g-+g 676 454ggf55fhgfh' fname from dual)
select regexp_count(fname, '\d') fname from t;
FNAME
----------
11
5
15
2. Подсчет количества символов в строке без учета регистра
with t(fname) as
(select 'A fox is not taken twice in the same snare' fname from dual)
select regexp_count(fname, 'a', 1, 'i') fname from t;
FNAME
----------
4