日期:2014-05-17  浏览次数:20786 次

oracle开发中字符串正则表达式的问题
请教一个问题:

比如有一个字符串,v_str := 'aBcX234EfX789uyTr'
是否能通过oracle自带的一个函数或者函数组合,从字符串中抽取出“X数字”的所有匹配,并用逗号连接起来,即
function(v_str) = 'X234,X789'
是否 regexp_ 相关函数能做到?

------解决方案--------------------
楼上的做法有点小瑕疵,
aBcX234EfX789uyTXr56 这样的字符串会输出X234,X789,X,56

好吧,写个循环
declare
l_str varchar2(128) := 'aBcX234EfX789uyTXr56';
l_substr varchar2(128);
l_result varchar2(128);
l_occurrence int := 1;
begin
loop
select regexp_substr(l_str, 'X[0-9]+', 1, l_occurrence) into l_substr from dual;
exit when l_substr is null;
if (l_occurrence <> 1) then
l_result := l_result || ',';
end if;
l_result := l_result || l_substr;
l_occurrence := l_occurrence + 1;
end loop;
dbms_output.put_line(l_result);
end;
------解决方案--------------------
SQL code

--发现问题是好事情,哥们,再去试,呵呵
SQL> declare
  2      v_str varchar(100) := 'aBcX234EfX789uyTrXr56';
  3  begin
  4      dbms_output.put_line(
  5          regexp_replace(
  6          regexp_replace(regexp_replace(replace(v_str,'X','aX'),
  7              '[A-WYZa-z]{1}[0-9]+|[^X0-9]|^[0-9]+',','),',{2,}',',')
  8          ,'^,|,$|,?X+[^0-9]','')
  9      );
 10  end;
 11  /
X234,X789                                                                       

已順利完成 PL/SQL 程序.