llleopevzner
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Как-то так: declare testing_string varchar2(50); pattern_string varchar2(50); function tst(aStr in varchar2) return varchar2 is res varchar2(200); begin for i in (select substr(mask,level,1) lt,level lvl from (select aStr mask from dual) t connect by level<=length(mask)) loop if instr('0123456789',i.lt)>0 then res:=res||'('||i.lt||')'; elsif i.lt='_' then res:=res||'([[:digit:]])'; else if instr(aStr,i.lt)<i.lvl then res:=res||'(\'||instr(aStr,i.lt)||')'; else res:=res||'([[:digit:]])'; end if; end if; end loop; return res; end; begin testing_string:='121223322'; pattern_string:='1_1AABBAA'; if regexp_like(testing_string,tst(pattern_string)) then dbms_output.put_line('match'); else dbms_output.put_line('not match'); end if; end; |