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 程序.