- Oracle 10 and above
Примеры использования регулярных выражений.
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